C#套接字编程-主机中的软件中止了已建立的连接
我已经用c#编写了典型的套接字程序,其中客户机请求一些东西,服务器响应它并关闭连接 考虑到没有防病毒或防火墙规则来阻止连接。导致此错误的原因是什么?“主机上的软件中止了已建立的连接” 我正在为此运行一个异步编程范例。在数千次连接中,我只收到几十次此错误。我试着创造一些场景。我无法重现这个异常 我觉得当客户端在没有通知服务器的情况下断开连接时会发生这种情况 如果你能在这种情况发生时给出适当的理由,那就真的很有帮助了。这个问题被问了好几次。但我没有找到令人满意的答案 因为异步代码非常大。我编写了同步程序并进行了仿真。我有一次例外,但我错过了。这是密码 服务器代码C#套接字编程-主机中的软件中止了已建立的连接,c#,sockets,C#,Sockets,我已经用c#编写了典型的套接字程序,其中客户机请求一些东西,服务器响应它并关闭连接 考虑到没有防病毒或防火墙规则来阻止连接。导致此错误的原因是什么?“主机上的软件中止了已建立的连接” 我正在为此运行一个异步编程范例。在数千次连接中,我只收到几十次此错误。我试着创造一些场景。我无法重现这个异常 我觉得当客户端在没有通知服务器的情况下断开连接时会发生这种情况 如果你能在这种情况发生时给出适当的理由,那就真的很有帮助了。这个问题被问了好几次。但我没有找到令人满意的答案 因为异步代码非常大。我编写了同步
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(
Dns.GetHostEntry(
Dns.GetHostName()).AddressList
.Where(e => e.AddressFamily == AddressFamily.InterNetwork)
.First().ToString()
);
serverSocket.Bind(new IPEndPoint(ip, 5050));
serverSocket.Listen(10);
Socket clientSocket = serverSocket.Accept();
int readCount = clientSocket.Receive(buffer);
string readString = Encoding.ASCII.GetString(buffer, 0, readCount);
Debug.WriteLine(readString);
clientSocket.Send(Encoding.ASCII.GetBytes("Server Response."));
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
IPAddress ip = IPAddress.Parse(Dns.GetHostEntry(Dns.GetHostName()).AddressList.Where(e => e.AddressFamily == AddressFamily.InterNetwork).First().ToString());
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(new IPEndPoint(ip, 5050));
clientSocket.Send(Encoding.ASCII.GetBytes("Hi server"));
int receiveCount = clientSocket.Receive(buffer,0,5,SocketFlags.None);
Debug.WriteLine(Encoding.ASCII.GetString(buffer, 0, receiveCount));
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
客户端代码
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(
Dns.GetHostEntry(
Dns.GetHostName()).AddressList
.Where(e => e.AddressFamily == AddressFamily.InterNetwork)
.First().ToString()
);
serverSocket.Bind(new IPEndPoint(ip, 5050));
serverSocket.Listen(10);
Socket clientSocket = serverSocket.Accept();
int readCount = clientSocket.Receive(buffer);
string readString = Encoding.ASCII.GetString(buffer, 0, readCount);
Debug.WriteLine(readString);
clientSocket.Send(Encoding.ASCII.GetBytes("Server Response."));
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
IPAddress ip = IPAddress.Parse(Dns.GetHostEntry(Dns.GetHostName()).AddressList.Where(e => e.AddressFamily == AddressFamily.InterNetwork).First().ToString());
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(new IPEndPoint(ip, 5050));
clientSocket.Send(Encoding.ASCII.GetBytes("Hi server"));
int receiveCount = clientSocket.Receive(buffer,0,5,SocketFlags.None);
Debug.WriteLine(Encoding.ASCII.GetString(buffer, 0, receiveCount));
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
请给出一些示例代码-客户机/服务器如何处理关闭套接字连接?每次都是用相同的方法得到该异常吗?您需要显示一些代码以及从何处获得异常。否则,就真的很难理解这个问题。正如我所说,异常很少发生。很难复制。但我记录了同样的异常。让我添加一些代码片段。