• 简单的web服务器


    主要是通过http协议相应用户请求

            public void start()
            {
                chuantou(80);
    
                using (listerner = new HttpListener())
                {
                    //指定身份验证 Anonymous匿名访问
                    listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
    
                    string host = common.net.address.get_in_IP();
    
                    //if (!string.IsNullOrEmpty(host))
                    //{
                    //    listerner.Prefixes.Add("http://" + host + ":80/");
                    //}
    
                    //listerner.Prefixes.Add("http://localhost:80/");
    
                    //listerner.Prefixes.Add("http://192.168.1.1:80/");
    
                    // listerner.Prefixes.Add("http://localhost/web/");
    
                    //任何80端口访问都去处理
                    listerner.Prefixes.Add("http://+:80/");
    
                    listerner.Start();
                    this.richTextBox1.Text += ("
    WebServer Start Successed.......");
                    while (true)
                    {
                        //等待请求连接
                        //没有请求则GetContext处于阻塞状态
                        HttpListenerContext ctx = listerner.GetContext();
                        ctx.Response.StatusCode = 200;//设置返回给客服端http状态代码
    
                        ctx.Response.ContentType = "text/html";
    
                        //ctx.Response.ContentEncoding = Encoding.Default;
    
                        string name = ctx.Request.QueryString["name"];
    
                        if (name != null)
                        {
                            this.richTextBox1.Text += (name);
                        }
    
                        //使用Writer输出http响应代码
                        using (StreamWriter writer = new StreamWriter(ctx.Response.OutputStream, Encoding.UTF8))
                        {
                            this.richTextBox1.Text += ("
    " + ctx.Request.UserHostAddress);
    
                            //writer.WriteLine("<html><head><title>The WebServer Test</title></head><body>");
                            //writer.WriteLine("<div style="height:20px;color:blue;text-align:center;"><p> hello11 {0}</p></div>", name);
                            //writer.WriteLine("<ul>");
    
                            ////foreach (string header in ctx.Request.Headers.Keys)
                            ////{
                            ////    writer.WriteLine("<li><b>{0}:</b>{1}</li>", header, ctx.Request.Headers[header]);
                            ////}
    
                            //writer.WriteLine("<li><b>{0}:</b>{1}</li>", ctx.Request.Headers.Keys[4], ctx.Request.Headers[ctx.Request.Headers.Keys[4]]);
    
                            //writer.WriteLine("</ul>");
                            //writer.WriteLine("</body></html>");
    
                            //读取文件
                            StreamReader reader;
                            string readtext = "";
                            //string dir = @"D:server";
                            if (ctx.Request.Url.AbsolutePath != "/")
                            {
                                if (File.Exists(dir + ctx.Request.Url.LocalPath))
                                {
                                    reader = new StreamReader(dir + ctx.Request.Url.LocalPath, Encoding.UTF8);
                                    //reader = new StreamReader(Path.Combine(dir, ctx.Request.Url.LocalPath.Replace("/", "")), Encoding.UTF8);
                                    readtext = reader.ReadToEnd();
                                    reader.Close();
                                    reader.Dispose();
                                }
                            }
                            else
                            {
                                reader = new StreamReader(Path.Combine(dir, "index.htm"), Encoding.UTF8);
                                readtext = reader.ReadToEnd();
                                reader.Close();
                                reader.Dispose();
                            }
                            //writer.Encoding = Encoding.UTF8;
                            writer.Write(readtext);
    
                            writer.Close();
                            ctx.Response.Close();
                        }
                    }
    
                    //listerner.Stop();
                }
            }

    这主要是相应对文本文件的请求,一般的web服务器还需要响应 img css js,

    希望大牛指点如何写一个完整的web服务器

  • 相关阅读:
    2016年之前优秀的单目SLAM系统
    EPSON四轴机械臂原点校准
    运动控制之手眼定位
    【已解决】移动端页面手势滑动触发touch 事件时,在左右上下部分出现空白部分的问题
    es分组排序和聚合后再筛选
    git配置ssh和小乌龟配置ssh
    单调栈的简单分享 Marathon
    es6.18升级到es7.17的不同点记录 Marathon
    input的ref属性
    手写axios
  • 原文地址:https://www.cnblogs.com/frog2008/p/6473167.html
Copyright © 2020-2023  润新知