Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 20804|Svare: 0

[Kilde] .net implementerer en enkel webserver ved bruk av HttpListener

[Kopier lenke]
Publisert på 08.12.2015 14:55:12 | | | |


For å forenkle lytteren for Http-protokollen ytterligere, gir .net oss HttpListener-klassen, som (System.Net med navnerommet) .net kapsler inn en serie oppgaver som håndterer Http-protokollen.

La oss først se på definisjonen i MSDN:

Merk: Denne klassen er ny i .NET Framework versjon 2.0.



Gir en enkel, programmerbar og kontrollerbar HTTP-protokolllytter. Det er umulig å arve en slik klasse.

Bruk:

offentlig lukket klasse HttpListener : IDisposable
Merk: Denne klassen kan kun brukes på Win xp eller Win Server 2003 eller nyere operativsystemer, fordi denne klassen må bruke Http.sys systemkomponenter for å få jobben gjort.
Derfor bør du først vurdere om denne klassen er støttet før du bruker den

  1. / 检查系统是否支持
  2.             if (!HttpListener.IsSupported)
  3.             {
  4.                 throw new System.InvalidOperationException(
  5.                     "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
  6.             }
Kopier koden
2. Start()-metoden gjør det mulig for denne instansen å akseptere innkommende forespørsler. Hør etter med en gang

3. Stop()-metoden lukker HttpListener-objektet etter å ha behandlet alle forespørsler som for øyeblikket er i kø

4. GetContext()-metoden venter på at den innkommende forespørselen skal returnere når den mottar forespørselen. Akkurat som Socket-implementasjonsserveren i forrige artikkel, finnes det en Accept()-metode, som begge nesten venter på innkommende forespørsler, og GetContext()-metoden vil også blokkere tråden, og når klientens forespørsel kommer, returnerer den et HttpListenerContext-objekt for å behandle forespørselen sendt av klienten.
    4.1 Be Hent HttpListenerRequest-objektet som representerer klientressursen.

          4.1.1 AcceptType Får tak i MIME-typen akseptert av klienten.
4.1.2 UserLanguages Henter språkinformasjon.
          4.1.3 UserAgent får brukeragenten levert av klienten.
          4.1.4 Headere Får en samling av header-navn/verdi-par sendt i en forespørsel ---> hente en egenskap som ikke gis av HttpListenerRequest-klassen.

4.2 Svar Denne egenskapen får et HttpListenerResponse-objekt, som sendes til klienten som svar på klientens forespørsel.

4.2.1 ContextLength64 Henter eller setter antall byte med kroppsdata som er inkludert i svaret.
          4.2.2 ContextType Henter eller setter MIME-typen til det returnerte innholdet.

Innholdet i responsmeldingsdelen sendes til klientnettleseren via strømming.


  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
Kopier koden







Foregående:WPF lukker vinduer og prosesser
Neste:La WPF-programmet ditt gjengi Win8-stiltemaer under Win7
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com