gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:40 24 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

解决此类问题的方法是在自己的应用协议(protocol)中加入一个heart-beat,在没有收到heartbeat的ACK时断开连接。

关于Java 套接字不会在死套接字上抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com