Java套接字不会在死套接字上抛出异常?

2024-01-07

我们的移动设备和服务器之间有一个简单的客户端服务器架构,两者都是用 Java 编写的。一个极其简单的ServerSocket和Socket实现。然而一个问题是,当客户端突然终止(没有正确关闭套接字)时,服务器不知道它已断开连接。此外,服务器可以继续写入该套接字而不会出现任何异常。为什么?

根据文档,如果您尝试写入另一端无法访问的套接字,Java 套接字应该抛出异常!


连接最终将因重传超时 (RTO) 而超时。然而,RTO 是使用基于网络延迟 (RTT) 的复杂算法计算的,请参阅此 RFC,

http://www.ietf.org/rfc/rfc2988.txt http://www.ietf.org/rfc/rfc2988.txt

因此,在移动网络上,这可能需要几分钟。等待10分钟,看看是否可以超时。

解决此类问题的方法是在您自己的应用程序协议中添加心跳,并在未收到心跳的 ACK 时断开连接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java套接字不会在死套接字上抛出异常? 的相关文章

随机推荐