前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自己写一个建的的Web服务器

自己写一个建的的Web服务器

作者头像
静心物语313
发布2020-03-24 15:06:57
1.3K0
发布2020-03-24 15:06:57
举报

只是最简单的Web服务器

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace 简单的Web服务器2
{   //改进服务器使的访问的之定义就返回请求的页面  
    //从请求中报文中读取,第一行信息就行了  
    class Program
    {
        static void Main(string[] args)
        {
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//宿舍的大妈
            serverSocket.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Any, 8089));//我这个程序监听的是8080端口
            serverSocket.Listen(10);//启动监听
            while (true)//男生去女生宿舍楼找女生
            {
                Console.WriteLine("Web服务器等待请求");
                string firstLine;
                Socket socket = serverSocket.Accept();//等待有人请求,这个是男女生通讯的通道 
                Console.WriteLine("请求来了");
                using (NetworkStream netStream = new NetworkStream(socket))//接收套接字
                using (StreamReader reader = new StreamReader(netStream))
                {
                    //从浏览器中读取请求的套接字
                    firstLine = reader.ReadLine();//读取GET /1.html HTTP/1.1
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        Console.WriteLine(line);
                        if (line.Length <= 0)//浏览器发送了“write.Writerline()”//表示结束
                        {
                            break;//遇到空行之后代表客户端发送结束,因此开始要给浏览器返回内容了
                        }
                    }

                    string[] strs = firstLine.Split(' ');//以空格切割字符创
                    string url = strs[1];//拿到字符创切割的第二个部分 /1.html
                    using (NetworkStream nerStream = new NetworkStream(socket))
                    using (StreamWriter writer = new StreamWriter(nerStream))//相应报文写入套接字
                    {
                        string filePath = @"f:\www" + url;
                        Console.WriteLine("filePath" + filePath);
                        if (File.Exists(filePath))
                        {
                            writer.WriteLine("HTTP/1.1 200 OK");
                            writer.WriteLine();//Http协议规定:服务器返回给浏览器的报文头和正文之间用一个空行分割
                            string html = File.ReadAllText(filePath);
                            Console.WriteLine(html);
                        }
                        else
                        {
                            writer.WriteLine("HTTP/1.1 404 NOT FOUND");
                            writer.WriteLine();
                            writer.WriteLine("NO  That Html File");
                        }

                    }
                    socket.Disconnect(false);//男女生访问关闭 -----//服务器端返回完毕内容就断开了连接
                }
            }
        }
    }
}

第一个Web服务器,访问本机127.0.0.1

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace 简单的Web服务器
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//宿舍的大妈
            serverSocket.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Any, 8081));//我这个程序监听的是8080端口
            serverSocket.Listen(10);//启动监听
            while (true)//男生去女生宿舍楼找女生
            {
                Console.WriteLine("等待请求");
                using (Socket socket = serverSocket.Accept())//等待有人请求,这个是男女生通讯的通道
                { 
                    using(NetworkStream netStream=new NetworkStream(socket))//接收套接字
                    using(StreamReader reader=new StreamReader(netStream))
                    {
                        //从浏览器中读取请求的套接字
                        string line;
                        while ((line=reader.ReadLine())!=null)
                        {
                            Console.WriteLine(line);
                            if (line.Length<=0)//浏览器发送了“write.Writerline()”//表示结束
                            {
                                break;//遇到空行之后代表客户端发送结束,因此开始要给浏览器返回内容了
                            }
                        }
                    }
                    using(NetworkStream nerStream=new NetworkStream(socket))
                    using (StreamWriter writer = new StreamWriter(nerStream))//相应报文写入套接字
                    {
                        writer.WriteLine("HTTP/1.1 200 OK");
                        writer.WriteLine();//Http协议规定:服务器返回给浏览器的报文头和正文之间用一个空行分割
                        writer.WriteLine("Welcome to connect to me !");
                    }
                    socket.Disconnect(false);//男女生访问关闭 -----//服务器端返回完毕内容就断开了连接
                    
                }
            }
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档