通过套接字正确接收请求数据作为HTTP服务器

时间:2014-02-25 08:06:21

标签: c# sockets http tcp

我正在尝试为学习体验创建一个简单的HTTP服务器。服务器应该接收请求数据并发回响应数据。首先,我创建了一个Socket。遗憾的是,我不知道如何正确实施接收部分。

我相信我无法致电socket.Receive并始终期望所有数据都能成功传输。我将不得不使用循环来继续流数据。我不明白程序应该停止数据流的哪种情况!

检查读取的字节数是否为0将不起作用,因为只有在连接关闭时才会发生。我该如何实施呢?

        var listen = new TcpListener(IPAddress.Parse("127.0.0.1"), 8070);
        listen.Start();
        var con = listen.AcceptSocket();
        listen.Stop();

        using (var ms = new MemoryStream())
        {
            while (???) //what condition should stop the streaming?
            {
                var buffer = new byte[8000];
                int read = con.Receive(buffer);

                ms.Write(buffer, 0, read);
            }
        }

1 个答案:

答案 0 :(得分:0)

好吧,我发现在经过一些失败和推理后如何正确地做到这一点!在HTTP规范中,它告诉我们在a或“\ r \ n”之后将终止请求。所以,这是我最终用来正确接收数据的代码:

        var listen = new TcpListener(IPAddress.Parse("127.0.0.1"), 8070);
        listen.Start();
        var con = listen.AcceptSocket();
        listen.Stop();

        string input = "";
        while (!input.EndsWith("\r\n\r\n"))
        {
            var buffer = new byte[8000];
            int read = con.Receive(buffer);
            input += Encoding.ASCII.GetString(buffer, 0, read);
        }