套接字重置的原因是什么

时间:2015-04-27 17:34:30

标签: java c++ sockets

我有问题。我的套接字连接中断,我找不到路由原因。

有2台服务器。这些是两台位于不同国家的计算机。第一个运行Java程序,它等待通过套接字的连接。第二台服务器运行连接到Java服务器的C ++程序,并在一个端口上打开几个套接字。下一个服务器通过这些套接字通过UTF字符串进行交换。

问题是插槽连接有时会中断。这不是网络或电缆拔出的问题,因为2个插座可以被中断,但其余8个工作正常。两个服务器的问题看起来都是一样的。每个服务器都有一个调用阻塞read()方法的线程,两个方法一次抛出一个异常。 Java服务器抛出以下内容:

  

java.net.SocketException:连接重置      在java.net.SocketInputStream.read(未知来源)      在java.net.SocketInputStream.read(未知来源)      在java.net.SocketInputStream.read(未知来源)      at java.io.DataInputStream.readUnsignedShort(Unknown Source)      at java.io.DataInputStream.readUTF(Unknown Source)      在java.io.DataInputStream.readUTF(未知来源)

C ++服务器抛出以下内容:

  

错误10054(由对等方重置连接。   远程主机强制关闭现有连接。)发生接收数据   CSocket :: Receive(),第199行中的错误

所有明显的假设,例如其中一个服务器关闭了套接字'并且'其中一个服务器发送了无限量的数据'已经检查过了。没有检测到问题的原因。服务器可以正常工作1小时,然后5个插座可以在5分钟内中断,接下来0.5个小时一切正常,下一个插座中断等等。

请建议去哪里找到问题路线原因。谢谢。

1 个答案:

答案 0 :(得分:0)

由于各种原因(例如应用程序崩溃,系统重启,远程主机硬关闭)导致意外强制关闭远程连接。来自远程系统的内核将带有RST位的数据包发送到本地系统。执行任何SEND(可能是保持活动数据包)或RECEIVE操作的本地套接字随后会因此错误而失败。延迟设置的某些组合也可能导致设置RST位的数据包。