Java套接字没有在死套接字上抛出异常?

ero*_*ppa 7 java sockets networking android blackberry

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

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

Bil*_*l K 0

TCP/IP 通信可能非常奇怪。TCP 将在堆栈的底层重试相当长一段时间,而不会让上层知道发生了任何事情。

我完全希望在一段时间后(30 秒到几分钟)您应该会看到一个错误,但我还没有对此进行测试,我只是想了解 TCP 应用程序的工作方式。

您也许可以收紧 TCP 规范(重试、超时等),但同样,也没有对其进行太多干扰。

另外,我可能完全错了,你使用的 Java 实现只是不稳定。