我一直在使用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工具來處理不正確形成的請求(或者它是否完成處理請求)。 –