Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 20804|Svar: 0

[Källa] .net implementerar en enkel webbserver med HttpListener

[Kopiera länk]
Publicerad på 2015-12-08 14:55:12 | | | |


För att ytterligare förenkla lyssnaren för Http-protokollet ger .net oss HttpListener-klassen, som (System.Net med namnrymden) .net kapslar in en serie uppgifter som hanterar Http-protokollet.

Låt oss först titta på definitionen i MSDN:

Obs: Denna klass är ny i .NET Framework version 2.0.



Tillhandahåller en enkel, programmerbar och kontrollerbar HTTP-protokolllyssnare. Det är omöjligt att ärva en sådan klass.

Användning:

publik sluten klass HttpListener : IDisposable
Observera: Denna klass kan endast användas på operativsystem för Win xp eller Win Server 2003 eller senare, eftersom denna klass måste använda Http.sys systemkomponenter för att utföra uppgiften.
Därför bör du först bedöma om denna klass stöds innan du använder den

  1. / 检查系统是否支持
  2.             if (!HttpListener.IsSupported)
  3.             {
  4.                 throw new System.InvalidOperationException(
  5.                     "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
  6.             }
Kopiera koden
2. Start()-metoden tillåter denna instans att acceptera inkommande förfrågningar. Lyssna genast

3. Stop()-metoden stänger HttpListener-objektet efter att alla för närvarande köade förfrågningar har bearbetats

4. GetContext()-metoden väntar på att den inkommande förfrågan ska returnera när den tar emot förfrågan Precis som Socket-implementeringsservern i föregående artikel finns det en Accept()-metod, som båda nästan väntar på inkommande förfrågningar, och GetContext()-metoden blockerar också tråden, och när klientens förfrågan anländer returnerar den ett HttpListenerContext-objekt för att bearbeta den begäran som klienten skickat.
    4.1 Request Obtain the HttpListenerRequest-objektet som representerar klientresursen.

          4.1.1 AcceptType Erhåller den MIME-typ som accepteras av klienten.
4.1.2 UserLanguages Hämta språkinformation.
          4.1.3 UserAgent hämtar användaragenten som tillhandahålls av klienten.
          4.1.4 Headers Får en samling header-namn/värdepar som skickas i en förfrågan ---> få en egenskap som inte tillhandahålls av klassen HttpListenerRequest.

4.2 Svar Denna egenskap får ett HttpListenerResponse-objekt, som skickas till klienten som svar på klientens begäran.

4.2.1 ContextLength64 Hämtar eller anger antalet byte kroppsdata som ingår i svaret.
          4.2.2 ContextType Hämtar eller sätter MIME-typen för det returnerade innehållet.

Innehållet i svarsmeddelandets innehåll skickas till klientens webbläsare 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
Kopiera koden







Föregående:WPF stänger fönster och processer
Nästa:Låt ditt WPF-program rendera Win8-liknande teman under Win7
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com