Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 20804|Válasz: 0

[Forrás] A .net egy egyszerű webszervert valósít meg a HttpListener segítségével

[Linket másol]
Közzétéve 2015. 12. 08. 14:55:12 | | | |


A Http protokoll hallgatójának további egyszerűsítése érdekében a .net biztosítja nekünk a HttpListener osztályt, amely (System.Net a névtérrel együtt) a .net egy sor feladatot foglal magában, amelyek a Http protokollt kezelik.

Nézzük meg először az MSDN definícióját:

Megjegyzés: Ez az osztály új a .NET Framework 2.0 verzióban.



Egyszerű, programozható és irányítható HTTP protokollhallgatót biztosít. Lehetetlen egy ilyen osztályt örökölni.

Használat:

public lezárt osztály HttpListener : IDisposable
Megjegyzés: Ez az osztály csak Win xp, Windows Server 2003 vagy újabb operációs rendszereken használható, mivel ennek az osztálynak Http.sys rendszerkomponenseket kell használnia a feladat elvégzéséhez.
Ezért először meg kell ítélni, hogy támogatott-e ez az osztály, mielőtt használnád

  1. / 检查系统是否支持
  2.             if (!HttpListener.IsSupported)
  3.             {
  4.                 throw new System.InvalidOperationException(
  5.                     "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
  6.             }
Kód másolása
2. A Start() metódus lehetővé teszi ennek az instancenak a bejövő kérések elfogadását. Hallgass azonnal

3. A stop() metódus lezárja a HttpListener objektumot az összes jelenleg sorban lévő kérés feldolgozása után

4. A GetContext() metódus megvárja, hogy a bejövő kérés visszatérjen, amikor megkapja a kérést. Ahogy az előző cikkben említett Socket implementációs szervernél is, létezik egy Accept() metódus, amelyek majdnem várnak a bejövő kérésekre, és a GetContext() metódus is blokkolja a szálat, és amikor megérkezik a kliens kérése, egy HttpListenerContext objektumot ad vissza, hogy feldolgozza az ügyfél által küldött kérést.
    4.1 Kérés Szerezze be a klienserőforrást képviselő HttpListenerRequest objektumot.

          4.1.1 Az AcceptType megkapja az ügyfél által elfogadott MIME típust.
4.1.2 UserLanguages Nyelvi információk beszerzése.
          4.1.3 A UserAgent megszerzi a kliens által biztosított felhasználói ügynököt.
          4.1.4 Fejlécek Szerezzen egy fejlécnév/értékpár gyűjteményét, ---> olyan tulajdonságot kapjon, amelyet a HttpListenerRequest osztály nem biztosít.

4.2 Válasz Ez a tulajdonság egy HttpListenerResponse objektumot kap, amelyet az ügyfél kérésére küldenek el az ügyfélnek.

4.2.1 ContextLength64 Megkapja vagy állítja be a válaszba bevont bájtok testadatait.
          4.2.2 ContextType Megkapja vagy állítja be a visszaküldött tartalom MIME típusát.

A válaszüzenet testének tartalma streaminggel érkezik a kliens böngészőhöz.


  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
Kód másolása







Előző:A WPF ablakokat és folyamatokat zár
Következő:Hagyd, hogy a WPF programod megjelenítse a Win8 stílusú témákat a Win7 alatt.
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com