欢迎光临
我们一直在努力

使用HttpListener实现简单Web服务器

      不知园友们看没看上一篇博文,上篇将的是通过最底层的Socket(套接字)实现一个简单的Web服务器,是不是感觉有点繁琐,不要怕今天这篇博文就带你们认识一个新的实现方法,就是使用httplistener

      为了进一步简化Http协议的监听器,.net为我们提供了HttpListener类,(为与命名空间System.Net).net在这个类中封装了一系列的的处理Http协议的工作。

首先看一下MSDN中的定义:

注意:此类在 .NET Framework 2.0 版中是新增的。

 

提供一个简单的、可通过编程方式控制的 HTTP 协议侦听器。无法继承此类。

用法:

 public sealed class HttpListener : IDisposable
注意:该类只能在Win xp 或者win server 2003 以上的操作系统中才能使用,因为这个类必须使用Http.sys系统组件才能完成工作。
所以在使用前应该先判断一下是否支持该类
// 检查系统是否支持 if (!HttpListener.IsSupported) { throw new System.InvalidOperationException( "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!"); }


下面罗列下本案例所用到的一些属性方法
1. HttpListener.prefixes 获取由此HttpListener对象处理的URI(统一资源标示符)前缀。

// 注意前缀必须以 / 正斜杠结尾 string[] prefixes = new string[] { "http://localhost:8080/" }; // 创建监听器. HttpListener listener = new HttpListener(); // 增加监听的前缀. foreach (string s in prefixes) { listener.Prefixes.Add(s); }

2. Start()方法 允许此实例接受传入的请求。即开始监听

3. Stop()方法 处理完所有当前排队的请求后关闭HttpListener对象

4. GetContext()方法  等待传入的请求接受到请求时返回 就如同上一篇的Socket实现服务器一样 有一个Accept()方法他俩个差不多都是等待传入的请求还有     一点就是GetContext()方法也会阻塞线程,当客户端的请求到达时,返回一个HttpListenerContext对象,处理客户端所发送过来的请求。
    4.1 request 获取表示客户端资源的HttpListenerRequest对象。

          4.1.1 AcceptType 获取客户端接受到的MIME类型。
4.1.2 UserLanguages 获取语言信息。
          4.1.3 UserAgent 获取客户端提供的用户代理。
          4.1.4 Headers 获取在请求中发送的标头名称/值对的集合 --->获取HttpListenerRequest类没有提供的一下属性。

4.2 Response 该属性获得HttpListenerResponse对象,该对象将被发送到客户端以响应客户端的请求。

4.2.1 ContextLength64 获取或设置响应中包括的正文数据的字节数。
          4.2.2 ContextType  获取或设置返回内容的 MIME 类型。

通过流的方式将响应报文体的内容发送给客户端浏览器。

下面是本文源码:

 // 检查系统是否支持 if (!HttpListener.IsSupported) { throw new System.InvalidOperationException( "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!"); } // 注意前缀必须以 / 正斜杠结尾 string[] prefixes = new string[] { "http://localhost:49152/" }; // 创建监听器. HttpListener listener = new HttpListener(); // 增加监听的前缀. foreach (string s in prefixes) { listener.Prefixes.Add(s); } // 开始监听  listener.Start(); console.WriteLine("监听中..."); while (true) { // 注意: GetContext 方法将阻塞线程,直到请求到达 HttpListenerContext context = listener.GetContext(); // 取得请求对象 HttpListenerRequest request = context.Request; Console.WriteLine("{0} {1} HTTP/1.1", request.HttpMethod, request.RawUrl); Console.WriteLine("Accept: {0}", string.Join(",", request.AcceptTypes)); Console.WriteLine("Accept-Language: {0}", string.Join(",", request.UserLanguages)); Console.WriteLine("User-Agent: {0}", request.UserAgent); Console.WriteLine("Accept-Encoding: {0}", request.Headers["Accept-Encoding"]); Console.WriteLine("Connection: {0}", request.KeepAlive ? "Keep-Alive" : "close"); Console.WriteLine("Host: {0}", request.UserHostName); Console.WriteLine("Pragma: {0}", request.Headers["Pragma"]); // 取得回应对象 HttpListenerResponse response = context.Response; // 构造回应内容 string responseString = @"<html> <head><title>From HttpListener Server</title></head> <body><h1>Hello, world.</h1></body> </html>"; // 设置回应头部内容,长度,编码  response.ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString); response.ContentType = "text/html; charset=UTF-8"; // 输出回应内容 System.IO.Stream output = response.OutputStream; System.IO.StreamWriter writer = new System.IO.StreamWriter(output); writer.Write(responseString); // 必须关闭输出流  writer.Close(); if (Console.KeyAvailable) break; } // 关闭服务器 listener.Stop();

通过HttpWatch看一下报文吧

使用HttpListener实现简单Web服务器

看到报文后是不是和源码中指定的一些属性相同 啊
(*^__^*) 嘻嘻…… 本篇就到这里  ( ^_^ )/~~拜拜

要源码的狂点啊   重要的不是运行结果是我上面给你们罗列的知识点哈

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《使用HttpListener实现简单Web服务器》
文章链接:https://www.456zj.com/6502.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址