Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 20804|Risposta: 0

[Fonte] .net implementa un semplice server web utilizzando HttpListener

[Copiato link]
Pubblicato su 08/12/2015 14:55:12 | | | |


Per semplificare ulteriormente l'ascoltatore del protocollo Http, .net ci fornisce la classe HttpListener, che (System.Net con il namespace) .net racchiude una serie di compiti che gestiscono il protocollo Http.

Diamo prima un'occhiata alla definizione in MSDN:

Nota: Questa classe è nuova in .NET Framework versione 2.0.



Fornisce un listener di protocollo HTTP semplice, programmabile e controllabile. È impossibile ereditare una tale classe.

Uso:

Classe pubblica sigillata HttpListener : IDisposable
Nota: Questa classe può essere utilizzata solo su Windows XP o sui sistemi operativi Win Server 2003 o successivi, perché deve utilizzare Http.sys componenti di sistema per svolgere il compito.
Pertanto, dovresti prima giudicare se questa classe è supportata prima di usarla

  1. / 检查系统是否支持
  2.             if (!HttpListener.IsSupported)
  3.             {
  4.                 throw new System.InvalidOperationException(
  5.                     "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
  6.             }
Copia codice
2. Il metodo Start() permette a questa istanza di accettare richieste in arrivo. Ascolta subito

3. Il metodo Stop() chiude l'oggetto HttpListener dopo aver elaborato tutte le richieste attualmente in coda

4. Il metodo GetContext() attende che la richiesta in ingresso ritorni quando riceve la richiesta Proprio come il server di implementazione Socket nell'articolo precedente, esiste un metodo Accept(), entrambi quasi in attesa di richieste in arrivo, e il metodo GetContext() bloccherà anch'esso il thread, e quando arriva la richiesta del client, restituirà un oggetto HttpListenerContext per elaborare la richiesta inviata dal client.
    4.1 Richiedi Ottenere l'oggetto HttpListenerRequest che rappresenta la risorsa client.

          4.1.1 AcceptType ottiene il tipo MIME accettato dal cliente.
4.1.2 Linguaggi utente Ottieni informazioni sulla lingua.
          4.1.3 UserAgent ottiene l'user agent fornito dal client.
          4.1.4 Header Ricevi una raccolta di coppie nome/valore intestazione inviate in una richiesta ---> ottieni una proprietà non fornita dalla classe HttpListenerRequest.

4.2 Risposta Questa proprietà ottiene un oggetto HttpListenerResponse, che verrà inviato al client in risposta alla richiesta del cliente.

4.2.1 ContextLongezza64 Riceve o imposta il numero di byte di dati corporei inclusi nella risposta.
          4.2.2 ContextType Ottiene o imposta il tipo MIME del contenuto restituito.

Il contenuto del corpo del messaggio di risposta viene inviato al browser client tramite 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
Copia codice







Precedente:WPF chiude finestre e processi
Prossimo:Lascia che il tuo programma WPF renderizzi temi in stile Win8 sotto Win7
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com