首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java套接字API:如何判断连接是否已关闭?

Java套接字API:如何判断连接是否已关闭?
EN

Stack Overflow用户
提问于 2012-04-20 13:20:59
回答 7查看 122.9K关注 0票数 105

我遇到了Java套接字API的一些问题。我正在尝试显示当前连接到我的游戏的玩家数量。很容易确定玩家何时已连接。但是,使用套接字API确定播放器何时断开连接似乎是不必要的困难。

在远程断开的套接字上调用isConnected()似乎总是返回true。类似地,在远程关闭的套接字上调用isClosed()似乎总是返回false。我已经读过了,为了实际确定套接字是否已关闭,必须将数据写入输出流,并且必须捕获异常。这似乎是一种非常不干净的方式来处理这种情况。我们只需要不断地在网络上发送垃圾消息,才能知道某个套接字何时关闭。

有没有其他的解决方案?

EN

回答 7

Stack Overflow用户

发布于 2012-04-20 13:37:02

在各种消息传递协议中,通常的做法是保持彼此的心跳(保持发送ping数据包),数据包不需要很大。探测机制将允许你在TCP找出之前就检测到断开的客户端(TCP超时要高得多)发送一个探测并等待例如5秒的回复,如果你没有看到后续2-3个探测的回复,那么你的播放器是断开的。

还有,related question

票数 11
EN

Stack Overflow用户

发布于 2020-08-24 10:30:35

我也遇到过类似的问题。在我的例子中,客户端必须定期发送数据。我希望你有同样的要求。然后我设置了SO_TIMEOUT socket.setSoTimeout(1000 * 60 * 5);,当指定的时间到期时抛出java.net.SocketTimeoutException。这样我就可以很容易地检测到死掉的客户端。

票数 2
EN

Stack Overflow用户

发布于 2012-04-20 13:55:21

我认为这是tcp连接的本质,在该标准中,在传输过程中需要大约6分钟的静默,然后我们才能得出输出连接消失的结论!所以我不认为你能找到这个问题的确切解决方案。也许更好的方法是编写一些方便的代码来猜测服务器应该在什么时候假设用户连接关闭。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10240694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档