• 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:UsersyouzikuDesktopwendang";
                        //访问的文件名
                        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̶.̶    与 李二饼

  • 相关阅读:
    Flutter——限制按钮点击的时间间隔
    【友盟】添加埋点事件(以iOS和安卓端为例)
    Git——在VSCode中查看Git历史提交记录
    Flutter——【好用网站】大集合
    Flutter——数组(List)
    Flutter——实现强大的输入框功能
    基于腾讯位置服务定位实现物业巡检防作弊场景
    基于腾讯地图定位组件实现周边公用厕所远近排序分布图
    腾讯位置服务Flutter业务实践——地图SDK Flutter插件实现(一)
    微信小程序类快递自动填写收发货地址功能
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/8529517.html
Copyright © 2020-2023  润新知