我正在尝试创建一个简单的 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);
}
}
最佳答案
嗯,经过一些失败和推理,我发现了如何正确地做到这一点!在 HTTP 规范中,它告诉我们请求将在 , 或“\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);
}
关于c# - 通过套接字作为HTTP服务器正确接收请求数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22008084/