簡體   English   中英

C# - 已建立的連接被主機錯誤中的軟件中止

[英]C# - an established connection was aborted by the software in your host machine Error

我正在使用TCPListener構建一個Mock服務器。

當我嘗試通過運行客戶端來調試我的代碼時,我能夠在服務器上讀取請求。 但在客戶端,正在拋出異常。 以下是我從跟蹤中獲得的異常:

System.ServiceModel.CommunicationException:套接字連接已中止。 這可能是由於處理消息的錯誤或遠程主機超出接收超時或基礎網絡資源問題引起的。 本地套接字超時為'00:05:00'。 ---> System.IO.IOException:無法從傳輸連接讀取數據:已建立的連接已被主機中的軟件中止。 ---> System.Net.Sockets.SocketException:已建立的連接已被主機中的軟件中止

這是我在服務器上實現的代碼:

TcpClient client = listener.AcceptTcpClient();
NetworkStream nwStream = client.GetStream();
byte[] buffer = new byte[client.ReceiveBufferSize];
int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);
var dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);

byte[] sendBytes = null;
try
{
    var output = "POST HTTP/1.1 200 OK\r\n";
    output += "Server: Apache-Coyote/1.1\r\n";
    output += "Content-Type: application/soap+xml\r\n";
    output += "Content-Length: 632\r\n";
    output += "Date: Thu, 06 Aug 2015 02:06:39 GMT\r\n\r\n";
    output +=
        "<S:Envelope xmlns:S=\"http://www.w3.org/2003/05/soap-envelope\"><S:Header></S:Header><S:Body></S:Body></S:Envelope>";
    sendBytes = Encoding.ASCII.GetBytes(output);
    nwStream.Write(sendBytes, 0, sendBytes.Length);
    nwStream.Flush();
}
catch (SocketException se)
{
    throw;
}

client.Close();

編輯

我也試圖禁用我的防火牆,但仍然會發生異常。

設置正確的Content-Length會修復它。

如果Content-Length大於實際長度,則客戶端將繼續等待響應的其余部分。 但由於服務器已完成發送響應,因此它將結束該過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM