我一直在使用TcpListener类在C#中编写我自己的http Web服务器。现在,在任何人提到这个之前,我知道HttpListener,但之前使用过,由于防火墙异常和需要管理员帐户等等,Ive有一些问题。对于我的应用程序,它更容易做出简单的,建立网络服务器。我一直在使用python应用程序连接到我的C#web服务器,并发送一个简单的GET请求,并接收一个简单的响应。C#迷你Http服务器,知道何时关闭连接
我的问题是这个..服务器应该关闭连接还是客户端?我问,因为如果我在发送响应后关闭服务器中的连接,我的Python应用程序并不总是读取所有的响应。相反,套接字错误将被抛出“错误10054,'由对等重置连接'”。但是,如果我强制python应用程序关闭连接,我不知道如何检测到我的C#服务器上,因为C#TcpClient不包含断开连接事件。那么我该怎么做?我如何知道连接的客户端何时收到完整响应,以便我可以关闭连接?
目前,这个工作(用线程休眠)
// Write headers and body to the Socket
NetworkStream Stream = Client.GetStream();
// Write Headers
byte[] Buffer = Encoding.UTF8.GetBytes(Headers);
Stream.Write(Buffer, 0, Buffer.Length);
// Write Response Data if Request method is not HEAD
if (Request.RequestMethod != HttpRequestMethod.HEAD)
Stream.Write(BodyByteArr, 0, BodyByteArr.Length);
Stream.Flush();
System.Threading.Thread.Sleep(100);
Stream.Close();
Client.Close();
我认为我需要一个更好的选择,然后Thread.sleep()方法,这可能无法正常工作或如果客户需要更多的则睡眠时间来接收响应(慢速连接)
集管发送到HTTP服务器:
GET /test HTTP/1.1
Host: 127.0.0.1
Connection: close
发送回客户端接头:
HTTP/1.1 200 OK
Date: {Now}
Server: MiniHttp-ASPServer
Content-Type: text/plain; charset=utf-8
Content-Length: {length}
Connection: close
{contents}
您发送给客户端的标题是什么? –
在主帖子中添加 – Wilson212
我猜想这是一个内容长度问题。我相信内容的长度只是身体的长度。您可以稍微调试一下这种方法,就是使用像Chrome这样的健壮客户端来查看它是否使用F12工具来处理不正确形成的请求(或者它是否完成处理请求)。 –