我正在尝试为学习体验创建一个简单的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);
}
}
答案 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);
}