我在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();