Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 20804|Svar: 0

[Kilde] .net implementerer en simpel webserver ved hjælp af HttpListener

[Kopier link]
Opslået på 08/12/2015 14.55.12 | | | |


For yderligere at forenkle lytteren for Http-protokollen giver .net os HttpListener-klassen, som (System.Net med navnerummet) .net indkapsler en række opgaver, der håndterer Http-protokollen.

Lad os først se på definitionen i MSDN:

Bemærk: Denne klasse er ny i .NET Framework version 2.0.



Leverer en simpel, programmerbar og kontrollerbar HTTP-protokollytter. Det er umuligt at arve sådan en klasse.

Brug:

offentlig forseglet klasse HttpListener : IDisposable
Bemærk: Denne klasse kan kun bruges på Win XP- eller Win Server 2003 eller nyere operativsystemer, fordi denne klasse skal bruge Http.sys systemkomponenter for at udføre opgaven.
Derfor bør du først vurdere, om denne klasse er understøttet, før du bruger den

  1. / 检查系统是否支持
  2.             if (!HttpListener.IsSupported)
  3.             {
  4.                 throw new System.InvalidOperationException(
  5.                     "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
  6.             }
Kopier kode
2. Start()-metoden tillader denne instans at modtage indkommende forespørgsler. Lyt straks

3. Stop()-metoden lukker HttpListener-objektet efter at have behandlet alle aktuelt i kø forespørgsler

4. GetContext()-metoden venter på, at den indkommende anmodning vender tilbage, når den modtager anmodningen Ligesom Socket-implementeringsserveren i den forrige artikel findes der en Accept()-metode, som begge næsten venter på indkommende forespørgsler, og GetContext()-metoden vil også blokere tråden, og når klientens anmodning ankommer, returnerer den et HttpListenerContext-objekt for at behandle den anmodning, klienten sender.
    4.1 Request Hent objektet HttpListenerRequest, der repræsenterer klientressourcen.

          4.1.1 AcceptType opnår den MIME-type, der accepteres af klienten.
4.1.2 UserLanguages Indhent sproginformation.
          4.1.3 UserAgent får brugeragenten, som klienten leverer.
          4.1.4 Headers Får en samling af header-navn/værdi-par, der sendes i en forespørgsel ---> få en egenskab, som ikke leveres af HttpListenerRequest-klassen.

4.2 Svar Denne egenskab modtager et HttpListenerResponse-objekt, som sendes til klienten som svar på klientens anmodning.

4.2.1 ContextLength64 Henter eller sætter antallet af bytes body data, der er inkluderet i svaret.
          4.2.2 ContextType Henter eller sætter MIME-typen for det returnerede indhold.

Indholdet af svarbeskedens krop sendes til klientbrowseren via streaming.


  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 kode







Tidligere:WPF lukker vinduer og processer
Næste:Lad dit WPF-program gengive Win8-stil temaer under Win7
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com