See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 20804|Vastuse: 0

[Allikas] .net rakendab lihtsat veebiserverit, kasutades HttpListenerit

[Kopeeri link]
Postitatud 08.12.2015 14:55:12 | | | |


Et kuulajat Http protokolli jaoks veelgi lihtsustada, pakub .net meile HttpListener klassi, mis (System.Net nimeruumiga) kapseldab .net hulga ülesandeid, mis haldavad Http protokolli.

Vaatame esmalt MSDN-i definitsiooni:

Märkus: See klass on uus .NET Frameworki versioonis 2.0.



Pakub lihtsat, programmeeritavat ja juhitavat HTTP-protokolli kuulajat. Sellist klassi on võimatu pärida.

Kasutus:

avalik suletud klass HttpListener : IDisposable
Märkus: Seda klassi saab kasutada ainult Win xp või Win Server 2003 või uuematel operatsioonisüsteemidel, kuna see klass peab töö tegemiseks kasutama Http.sys süsteemikomponente.
Seetõttu peaksid esmalt hindama, kas see klass on toetatud, enne kui kasutad seda

  1. / 检查系统是否支持
  2.             if (!HttpListener.IsSupported)
  3.             {
  4.                 throw new System.InvalidOperationException(
  5.                     "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
  6.             }
Kopeeri kood
2. Start() meetod võimaldab sellel instantsil vastu võtta saabuvaid päringuid. Kuula kohe

3. Stop() meetod sulgeb HttpListeneri objekti pärast kõigi hetkel järjekorras olevate päringute töötlemist

4. GetContext() meetod ootab, kuni saabuv päring tagastatakse, kui ta päringu vastu võtab Nagu eelnevas artiklis mainitud Socket rakendusserveris, on olemas Accept() meetod, mis mõlemad peaaegu ootavad saabuvaid päringuid, ning GetContext() meetod blokeerib samuti lõime ning kui kliendi päring saabub, tagastab see HttpListenerContext objekti, mis töötleb kliendi saadetud päringut.
    4.1 Päring Hangi HttpListenerRequest objekt, mis esindab kliendiressurssi.

          4.1.1 AcceptType Saab kliendi poolt aktsepteeritud MIME tüübi.
4.1.2 Kasutajakeeled Hangi keeleinfot.
          4.1.3 UserAgent hangib kliendi poolt pakutava kasutajaagendi.
          4.1.4 Päised Hangi päringus päise nime/väärtuse paaride kogum, ---> saada omadus, mida HttpListenerRequest klass ei paku.

4.2 Vastus See omadus saab HttpListenerResponse objekti, mis saadetakse kliendile kliendi soovile vastuseks.

4.2.1 ContextLength64 Saab või määrab vastuses sisalduvate kehaandmete baitide arvu.
          4.2.2 ContextType Saab või määrab tagastatud sisu MIME tüübi.

Vastuse sõnumi sisu saadetakse kliendi brauserisse voogedastuse teel.


  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
Kopeeri kood







Eelmine:WPF sulgeb aknad ja protsessid
Järgmine:Lase oma WPF programmil renderdada Win8 stiilis teemasid Win7 all
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com