c# -一个已建立的连接被你的主机上的软件终止了错误

本文关键字:主机 软件 错误 终止 连接 一个 建立 | 更新日期: 2023-09-27 18:07:10

我正在使用TCPListener构建一个模拟服务器。

当我试图通过运行客户端来调试代码时,我能够读取服务器上的请求。但是在客户端,抛出了一个异常。下面是我从跟踪中得到的异常:

System.ServiceModel。CommunicationException: socket连接被中止。这可能是由于处理消息时出现错误、远程主机超过接收超时或底层网络资源问题造成的。本地套接字超时'00:05:00'。——和gt;System.IO.IOException:无法从传输连接中读取数据:已建立的连接被主机中的软件终止。——和gt;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();

编辑

我也试过禁用我的防火墙,但异常仍然发生

c# -一个已建立的连接被你的主机上的软件终止了错误

设置正确的Content-Length修复。

如果Content-Length大于实际长度,客户端将继续等待响应的其余部分。但是由于服务器已经完成了发送响应,因此它将结束该过程。