异步服务器套接字错误:远程主机强制关闭现有连接

时间:2014-08-31 13:34:46

标签: c# sockets asynchronous tcp

我正在使用msdn异步服务器套接字示例。 link

在此服务器上,我从设备获取字符串格式的数据。

问题是在成功获取数据一段时间后我遇到错误并且应用程序挂起: -

套接字异常未处理: 远程主机强行关闭现有连接。

c#debug在这部分代码中显示错误。

listener.BeginAccept(
      new AsyncCallback(AcceptCallback),
      listener);

如何解决错误。

2 个答案:

答案 0 :(得分:0)

据我所知,服务器与客户端建立了连接并开始发送数据。如果这比服务器创建的套接字正确,绑定它并正确启动tcp传输。后续服务器因异常而销毁套接字,连接丢失。

我能想到的是这个问题与邮件大小有关。您可以检查缓冲区大小和超时间隔。

答案 1 :(得分:0)

帮助解决错误: 确认您没有遇到网络问题。 确认远程主机未关闭连接(导致此错误的最常见原因)。 确认您提供足够的待办事项来处理所有用户:

listener.Listen(100);

其中100 =队列中挂起连接的最大长度。

您可以在ReadCallback中捕获远程主机断开连接:

SocketError errorCode;
int bytesRead = handler.EndReceive(ar, out errorCode);
if (errorCode != SocketError.Success)
{
    bytesRead = 0;
    //handle remote host disconnect...
}

如果这些都签出,那么您的代码中可能还有其他问题。您可能需要发布有关如何创建,启动,停止侦听器以及远程主机如何处理连接的更多详细信息。