.net core 使用控制檯開發簡單的web服務器,接收http請求並響應請求

        static void Main(string[] args)
        {
            WebServer.Start();

            Console.Read();
        }
    public class WebServer
    {
        static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        public static void Start()
        {
            socket.Bind(new IPEndPoint(IPAddress.Any, 8002));

            socket.Listen(100);

            //接收客戶端的 Socket請求
            socket.BeginAccept(OnAccept, socket);

            Console.WriteLine("當前web服務器啓動成功,端口號爲:8002");
        }

        //接收請求
        public static void OnAccept(IAsyncResult async)
        {
            var serverSocket = async.AsyncState as Socket;

            //獲取到客戶端的socket
            var clientSocket = serverSocket.EndAccept(async);

            //進行下一步監聽
            serverSocket.BeginAccept(OnAccept, serverSocket);

            var bytes = new byte[10000];

            //獲取socket的內容
            var len = clientSocket.Receive(bytes);

            //將 bytes[] 轉換 string
            var request = Encoding.UTF8.GetString(bytes, 0, len);

            var response = string.Empty;

            if (!string.IsNullOrEmpty(request) && !request.Contains("favicon.ico"))
            {
                // /1.html
                var filePath = request.Split("\r\n")[0].Split(" ")[1].TrimStart('/');

                //獲取文件內容
                response = System.IO.File.ReadAllText(filePath, Encoding.UTF8);
            }


            //按照http的響應報文返回
            var responseHeader = string.Format(@"HTTP/1.1 200 OK
Date: Sun, 26 Aug 2018 03:33:36 GMT
Server: nginx
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Pragma: no-cache
Via: hngd_ax63.139
X-Via: 1.1 tjhtapp63.147:3800, 1.1 cbsshdf-A4-2-D-14.32:8101
Connection: keep-alive
Content-Length: {0}

", Encoding.UTF8.GetByteCount(response));

            //返回給客戶端了
            clientSocket.Send(Encoding.UTF8.GetBytes(responseHeader));
            clientSocket.Send(Encoding.UTF8.GetBytes(response));

            clientSocket.Close();
        }
    }

啓動項目,訪問:http://127.0.0.1:8002/1.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章