Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 20804|Resposta: 0

[Fonte] .net implementa um servidor web simples usando o HttpListener

[Copiar link]
Publicado em 08/12/2015 14:55:12 | | | |


Para simplificar ainda mais o ouvinte do protocolo Http, o .net nos fornece a classe HttpListener, que (System.Net com o namespace) .net encapsula uma série de tarefas que lidam com o protocolo Http.

Vamos dar uma olhada na definição na MSDN primeiro:

Nota: Esta classe é nova no .NET Framework versão 2.0.



Fornece um ouvinte de protocolo HTTP simples, programável e controlável. É impossível herdar tal classe.

Uso:

Classe pública lacrada HttpListener : IDispositable
Nota: Esta classe só pode ser usada em sistemas operacionais Win xp ou Windows Server 2003 ou posteriores, pois essa classe precisa usar Http.sys componentes do sistema para realizar o trabalho.
Portanto, você deve primeiro avaliar se essa classe é suportada antes de usá-la

  1. / 检查系统是否支持
  2.             if (!HttpListener.IsSupported)
  3.             {
  4.                 throw new System.InvalidOperationException(
  5.                     "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
  6.             }
Copiar código
2. O método Start() permite que esta instância aceite solicitações recebidas. Escute imediatamente

3. O método Stop() fecha o objeto HttpListener após processar todas as requisições atualmente em fila

4. O método GetContext() espera que a requisição recebida retorne quando recebe a solicitação Assim como o servidor de implementação Socket no artigo anterior, existe um método Accept(), ambos quase aguardando requisições recebidas, e o método GetContext() também bloqueia a thread, e quando a solicitação do cliente chega, retorna um objeto HttpListenerContext para processar a solicitação enviada pelo cliente.
    4.1 Solicite Obtenha o objeto HttpListenerRequest que representa o recurso cliente.

          4.1.1 AceitaType obtém o tipo MIME aceito pelo cliente.
4.1.2 Línguas de Usuário Obter informações sobre idiomas.
          4.1.3 O UserAgent obtém o user agent fornecido pelo cliente.
          4.1.4 Cabeçalhos Receba uma coleção de pares nome/valor de cabeçalho enviada em uma solicitação ---> receba uma propriedade que não é fornecida pela classe HttpListenerRequest.

4.2 Resposta Esta propriedade recebe um objeto HttpListenerResponse, que será enviado ao cliente em resposta ao pedido do cliente.

4.2.1 ContextLength64 Recebe ou define o número de bytes de dados corporais incluídos na resposta.
          4.2.2 ContextType Recebe ou define o tipo MIME do conteúdo retornado.

O conteúdo do corpo da mensagem de resposta é enviado para o navegador cliente por 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
Copiar código







Anterior:WPF fecha janelas e processos
Próximo:Deixe seu programa WPF renderizar temas no estilo Win8 em Win7
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com