HttpListener 实现web服务器
一、使用方法
1. Start()方法 允许此实例接受传入的请求。即开始监听
2. Stop()方法 处理完所有当前排队的请求后关闭HttpListener对象
3. 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 类型。
通过流的方式将响应报文体的内容发送给客户端浏览器。
二、源码
public void SetWebServer() { //创建监听器 using (var httpListener = new HttpListener()) { //监听的路径 httpListener.Prefixes.Add("http://localhost:8889/"); //设置匿名访问 httpListener.AuthenticationSchemes = AuthenticationSchemes.Anonymous; //开始监听 httpListener.Start(); while (true) { //等待传入的请求接受到请求时返回,它将阻塞线程,直到请求到达 var context = httpListener.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; // 设置回应头部内容,长度,编码 response.ContentEncoding = Encoding.UTF8; response.ContentType = "text/plain;charset=utf-8"; var path = @"C:\Users\youziku\Desktop\wendang\"; //访问的文件名 var fileName = request.Url.LocalPath; //读取文件内容 var buff = File.ReadAllBytes(path + fileName); response.ContentLength64 = buff.Length; // 输出回应内容 System.IO.Stream output = response.OutputStream; output.Write(buff, 0, buff.Length); // 必须关闭输出流 output.Close(); } } }
来源:b̶i̶n̶g̶.̶ 与 李二饼