Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 20804|Respuesta: 0

[Fuente] .net implementa un servidor web sencillo usando HttpListener

[Copiar enlace]
Publicado en 8/12/2015 14:55:12 | | | |


Para simplificar aún más el listener del protocolo Http, .net nos proporciona la clase HttpListener, que (System.Net con el espacio de nombres) .net encapsula una serie de tareas que gestionan el protocolo Http.

Echemos un vistazo primero a la definición en MSDN:

Nota: Esta clase es nueva en la versión 2.0 de .NET Framework.



Proporciona un escuchador de protocolo HTTP simple, programable y controlable. Es imposible heredar tal clase.

Uso:

Clase pública sellada HttpListener : IDispositable
Nota: Esta clase solo puede usarse en Windows XP o en sistemas operativos Win Server 2003 o posteriores, porque debe utilizar Http.sys componentes del sistema para cumplir su función.
Por lo tanto, primero deberías juzgar si esta clase está soportada antes de usarla

  1. / 检查系统是否支持
  2.             if (!HttpListener.IsSupported)
  3.             {
  4.                 throw new System.InvalidOperationException(
  5.                     "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
  6.             }
Copiar código
2. El método Start() permite que esta instancia acepte solicitudes entrantes. Escucha inmediatamente

3. El método Stop() cierra el objeto HttpListener tras procesar todas las solicitudes actualmente en cola

4. El método GetContext() espera a que la solicitud entrante regrese cuando recibe la petición. Al igual que el servidor de implementación Socket en el artículo anterior, existe un método Accept(), ambos casi esperando solicitudes entrantes, y el método GetContext() también bloqueará el hilo, y cuando llega la solicitud del cliente, devolverá un objeto HttpListenerContext para procesar la solicitud enviada por el cliente.
    4.1 Solicita Obtener el objeto HttpListenerRequest que representa el recurso cliente.

          4.1.1 AcceptType obtiene el tipo MIME aceptado por el cliente.
4.1.2 Lenguajes de usuario Obtener información del idioma.
          4.1.3 UserAgent obtiene el user agent proporcionado por el cliente.
          4.1.4 Cabeceras Recibe una colección de pares nombre/valor de encabezado enviada en una solicitud ---> obtener una propiedad que no es proporcionada por la clase HttpListenerRequest.

4.2 Respuesta Esta propiedad recibe un objeto HttpListenerResponse, que se enviará al cliente en respuesta a la solicitud del cliente.

4.2.1 ContextoLongitud64 Obtiene o establece el número de bytes de datos corporales incluidos en la respuesta.
          4.2.2 ContextType Obtiene o establece el tipo MIME del contenido devuelto.

El contenido del cuerpo del mensaje de respuesta se envía al navegador cliente mediante 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 cierra ventanas y procesos
Próximo:Deja que tu programa WPF renderice temas al estilo Win8 bajo Win7
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com