我试图找出Java TCP套接字当前是否已连接,以下似乎只是告诉我套接字是否已经连接 - 而不是它当前是否仍然连接.
socket.isConnected();
Run Code Online (Sandbox Code Playgroud)
任何帮助表示感谢,谢谢.
Sum*_*ngh 20
socket.isConnected() 一旦客户端连接(甚至在断开连接后),它总是返回true!socket.getInputStream().read()
returns -1 如果客户端断开连接socket.getInetAddress().isReachable(int timeout):来自isReachable(int timeout)
测试该地址是否可访问.尝试尽力到达主机,但防火墙和服务器配置可以阻止导致无法访问状态的请求,同时可以访问某些特定端口.如果可以获得特权,则典型的实现将使用ICMP ECHO REQUEST,否则它将尝试在目标主机的端口7(Echo)上建立TCP连接.
Jas*_*ols 16
假设您对协议有一定程度的控制权,我非常喜欢发送心跳以验证连接是否处于活动状态.它被证明是最容易出错的方法,并且在连接断开时通常会给您最快的通知.
TCP Keepalive可以工作,但是如果远程主机突然断电怎么办?TCP可能需要很长时间才能超时.另一方面,如果您的应用中有逻辑需要每隔x秒进行一次心跳回复,那么当您第一次没有得到它们时,您就会知道连接不再有效,无论是通过远程端的网络还是服务器问题.
请参阅我是否需要心跳以保持TCP连接打开?进一步讨论.
| 归档时间: |
|
| 查看次数: |
112163 次 |
| 最近记录: |