我有问题。我的套接字连接中断,我找不到路由原因。
有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个小时一切正常,下一个插座中断等等。
请建议去哪里找到问题路线原因。谢谢。
答案 0 :(得分:0)
由于各种原因(例如应用程序崩溃,系统重启,远程主机硬关闭)导致意外强制关闭远程连接。来自远程系统的内核将带有RST位的数据包发送到本地系统。执行任何SEND(可能是保持活动数据包)或RECEIVE操作的本地套接字随后会因此错误而失败。延迟设置的某些组合也可能导致设置RST位的数据包。