이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 20804|회답: 0

[출처] .net은 HttpListener를 사용하여 간단한 웹 서버를 구현합니다

[링크 복사]
게시됨 2015. 12. 8. 오후 2:55:12 | | | |


Http 프로토콜의 리스너를 더욱 단순화하기 위해, .net은 HttpListener 클래스를 제공하는데, 이는 (네임스페이스와 System.Net) .net이 Http 프로토콜을 처리하는 일련의 작업을 캡슐화합니다.

먼저 MSDN의 정의를 살펴보겠습니다:

참고: 이 수업은 .NET Framework 버전 2.0에서 새롭게 도입되었습니다.



간단하고 프로그래밍 가능하며 제어 가능한 HTTP 프로토콜 리스너를 제공합니다. 그런 계급을 물려받는 것은 불가능합니다.

사용법:

public sealed class HttpListener : IDisposable
참고: 이 클래스는 Windows XP나 Windows Server 2003 이후 운영체제에서만 사용할 수 있으며, 이 클래스는 작업을 수행하기 위해 Http.sys 시스템 구성 요소를 사용해야 합니다.
따라서 사용하기 전에 이 클래스가 지원되는지 먼저 판단해야 합니다

  1. / 检查系统是否支持
  2.             if (!HttpListener.IsSupported)
  3.             {
  4.                 throw new System.InvalidOperationException(
  5.                     "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
  6.             }
코드 복사
2. Start() 메서드는 이 인스턴스가 들어오는 요청을 받을 수 있도록 허용합니다. 즉시 들어보세요

3. Stop() 메서드는 현재 대기열에 있는 모든 요청을 처리한 후 HttpListener 객체를 닫습니다

4. GetContext() 메서드는 요청을 받을 때 들어오는 요청이 돌아오기를 기다립니다. 앞서 언급한 소켓 구현 서버와 마찬가지로, Accept() 메서드가 있는데, 두 메서드 모두 거의 들어오는 요청을 기다리고 있습니다. GetContext() 메서드도 스레드를 차단하고, 클라이언트의 요청이 도착하면 클라이언트가 보낸 요청을 처리하기 위해 HttpListenerContext 객체를 반환합니다.
    4.1 요청: 클라이언트 리소스를 나타내는 HttpListenerRequest 객체를 얻습니다.

          4.1.1 AcceptType은 클라이언트가 수락하는 MIME 유형을 획득합니다.
4.1.2 사용자 언어 정보 획득.
          4.1.3 UserAgent는 클라이언트가 제공한 사용자 에이전트를 획득합니다.
          4.1.4 헤더 요청에서 보내진 헤더 이름/값 쌍 모음을 받---> HttpListenerRequest 클래스에서 제공하지 않은 속성을 얻습니다.

4.2 응답 이 속성은 클라이언트의 요청에 응답하여 전송되는 HttpListenerResponse 객체를 받습니다.

4.2.1 ContextLength64 응답에 포함된 본문 데이터 바이트 수를 획득하거나 설정합니다.
          4.2.2 ContextType은 반환된 콘텐츠의 MIME 유형을 가져가거나 설정합니다.

응답 메시지 본문의 내용은 스트리밍을 통해 클라이언트 브라우저로 전송됩니다.


  1. //HTTP监听
  2. private HttpListener listeren = new HttpListener();


  3.         #region 监听命令显示窗体
  4.         /// <summary>
  5.         /// 开启监听
  6.         /// </summary>
  7.         private void Init()
  8.         {
  9.             try
  10.             {
  11.                 //指定身份验证 Anonymous匿名访问
  12.                 listeren.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
  13.                 //创建IP地址
  14.                 IPAddress address = IPAddress.Parse(127.0.0.1);
  15.                 listeren.Prefixes.Add("http://" + address + ":30001/");
  16.                 listeren.Start();
  17.                 Thread threadlistener = new Thread(new ThreadStart(ThreadStartListener));
  18.                 threadlistener.Start();
  19.                 MessageBox.Show("监听成功");
  20.             }
  21.             catch (Exception ex)
  22.             {
  23.                 cfg.Logs.Add(new LogClass { LogStr = "HttpListener error", ExInfo = ex });
  24.             }
  25.         }
  26.         
  27.          /// <summary>
  28.         /// 监听连接线程
  29.         /// </summary>
  30.         private void ThreadStartListener()
  31.         {
  32.             try
  33.             {
  34.                 while (true)
  35.             {
  36.                 // 注意: GetContext 方法将阻塞线程,直到请求到达
  37.                 HttpListenerContext context = listeren.GetContext();
  38.                 // 取得请求对象
  39.                 HttpListenerRequest request = context.Request;
  40.                 Console.WriteLine("{0} {1} HTTP/1.1", request.HttpMethod, request.RawUrl);
  41.                 Console.WriteLine("Accept: {0}", string.Join(",", request.AcceptTypes));
  42.                 Console.WriteLine("Accept-Language: {0}",
  43.                     string.Join(",", request.UserLanguages));
  44.                 Console.WriteLine("User-Agent: {0}", request.UserAgent);
  45.                 Console.WriteLine("Accept-Encoding: {0}", request.Headers["Accept-Encoding"]);
  46.                 Console.WriteLine("Connection: {0}",
  47.                     request.KeepAlive ? "Keep-Alive" : "close");
  48.                 Console.WriteLine("Host: {0}", request.UserHostName);
  49.                 Console.WriteLine("Pragma: {0}", request.Headers["Pragma"]);
  50.                 // 取得回应对象
  51.                 HttpListenerResponse response = context.Response;
  52.                 // 构造回应内容
  53.                 string responseString
  54.                     = @"<html>
  55.                         <head><title>From HttpListener Server</title></head>
  56.                         <body><h1>Hello, 码农网(www.itsvse.com).</h1></body>
  57.                         </html>";
  58.                 // 设置回应头部内容,长度,编码
  59.                 response.ContentLength64
  60.                     = System.Text.Encoding.UTF8.GetByteCount(responseString);
  61.                 response.ContentType = "text/html; charset=UTF-8";
  62.                 // 输出回应内容
  63.                 System.IO.Stream output = response.OutputStream;
  64.                 System.IO.StreamWriter writer = new System.IO.StreamWriter(output);
  65.                 writer.Write(responseString);
  66.                 // 必须关闭输出流
  67.                 writer.Close();
  68.             }
  69.             }
  70.             catch (Exception ex)
  71.             {
  72.                 cfg.Logs.Add(new LogClass { LogStr = "HttpListener error", ExInfo = ex });
  73.             }
  74.         }
  75.         #endregion
코드 복사







이전의:WPF는 윈도우와 프로세스를 닫습니다
다음:WPF 프로그램이 Win7에서 Win8 스타일 테마를 렌더링하게 하세요
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com