gpt4 book ai didi

java - 检测 TCP 丢失?

转载 作者:行者123 更新时间:2023-12-01 23:11:03 25 4
gpt4 key购买 nike

目前,我检测客户端是否崩溃的方法是监听通信时是否发生异常。我认为这是因为如果客户端崩溃,操作系统将关闭套接字。如果客户的互联网中断或者他们关闭了电脑,异常还会触发吗?如果不是,处理这种断开连接的最佳方法是什么?谢谢。

最佳答案

TCP 旨在无限期地维持连接,即使没有数据在任一方向上通过连接移动也是如此。这意味着如果客户端的网络或中间网络出现故障,连接不会关闭,您也不会看到异常 - 事实上,如果这样的网络出现故障,然后稍后恢复,甚至数小时后,TCP在此期间未使用的连接默认情况下仍然存在,并且可用于以后的进一步通信。如果客户端计算机崩溃或突然断电,您也不会遇到异常。如果客户端计算机正常关闭,您可能会遇到异常,因为其关闭过程可能包括关闭所有连接,具体取决于操作系统。

如果您想在断网一段时间或客户端崩溃时断开连接,通常最好的方法是设置 TCP keepalive。在Java中,可以通过调用Socket.setKeepalive(true)来启用TCP keepalive。这会导致您的套接字偶尔发送探测数据包以检查连接的另一端是否仍处于 Activity 状态。

请注意,TCP 保持 Activity 检查之间的默认间隔通常为两个小时,并且它通常是系统范围的属性。如果您希望间隔更短,则需要更改系统配置。

关于java - 检测 TCP 丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21973321/

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