Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 20804|Antwoord: 0

[Bron] .net implementeert een eenvoudige webserver met behulp van HttpListener

[Link kopiëren]
Geplaatst op 08-12-2015 14:55:12 | | | |


Om de luisteraar voor het Http-protocol verder te vereenvoudigen, biedt .net ons de HttpListener-klasse, die (System.Net met de namespace) .net een reeks taken incapsuleert die het Http-protocol afhandelen.

Laten we eerst naar de definitie in MSDN kijken:

Opmerking: Deze klasse is nieuw in .NET Framework versie 2.0.



Biedt een eenvoudige, programmeerbare en bestuurbare HTTP-protocol-luisteraar. Het is onmogelijk zo'n klasse te erven.

Gebruik:

openbaar verzegelde klasse HttpListener : IDISPOSABLE
Opmerking: Deze klasse kan alleen worden gebruikt op Win XP- of Win Server 2003 of latere besturingssystemen, omdat deze klasse Http.sys systeemcomponenten moet gebruiken om de taak te klaren.
Daarom moet je eerst beoordelen of deze klasse ondersteund wordt voordat je hem gebruikt

  1. / 检查系统是否支持
  2.             if (!HttpListener.IsSupported)
  3.             {
  4.                 throw new System.InvalidOperationException(
  5.                     "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
  6.             }
Code kopiëren
2. De Start()-methode stelt deze instantie in staat om binnenkomende verzoeken te accepteren. Luister meteen

3. De Stop()-methode sluit het HttpListener-object na verwerking van alle momenteel in de wachtrij staande verzoeken

4. De GetContext()-methode wacht tot het binnenkomende verzoek terugkeert wanneer het verzoek wordt ontvangen. Net als de Socket-implementatieserver in het vorige artikel is er een Accept()-methode, die beide bijna wachten op binnenkomende verzoeken, en de GetContext()-methode blokkeert ook de thread, en wanneer het verzoek van de client arriveert, zal het een HttpListenerContext-object teruggeven om het verzoek van de client te verwerken.
    4.1 Request Verkrijg het HttpListenerRequest-object dat de clientresource vertegenwoordigt.

          4.1.1 AcceptType Krijgt het MIME-type dat door de client wordt geaccepteerd.
4.1.2 UserLanguages Verkrijgen taalinformatie.
          4.1.3 UserAgent verkrijgt de user agent die door de client wordt geleverd.
          4.1.4 Headers Krijgen een verzameling header-naam/waardeparen die in een verzoek worden verzonden ---> krijgen een eigenschap die niet wordt geleverd door de HttpListenerRequest-klasse.

4.2 Response Deze eigenschap ontvangt een HttpListenerResponse-object, dat naar de client wordt gestuurd als reactie op het verzoek van de klant.

4.2.1 ContextLength64 Krijgt of stelt het aantal bytes aan lichaamsdata in het antwoord in.
          4.2.2 ContextType Krijgt of stelt het MIME-type van de geretourneerde inhoud in.

De inhoud van het responsbericht wordt via streaming naar de clientbrowser gestuurd.


  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
Code kopiëren







Vorig:WPF sluit vensters en processen
Volgend:Laat je WPF-programma Win8-stijl thema's renderen onder Win7
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com