如何检查套接字当前是否在 Java 中连接?

2022-09-01 15:47:01

我试图找出Java TCP套接字当前是否连接,以下内容似乎只是告诉我套接字是否在某个时候已经连接 - 而不是它当前是否仍然连接。

socket.isConnected();

任何帮助赞赏,谢谢。


答案 1
  • socket.isConnected()一旦客户端连接(甚至在断开连接后)返回总是正确的奇怪!
  • socket.getInputStream().read()
    • 只要客户端已连接,线程就会等待输入,从而使程序不执行任何操作 - 除非您获得一些输入
    • returns -1如果客户端断开连接
  • socket.getInetAddress().isReachable(int timeout):从可访问(整型超时)

    测试该地址是否可访问。实现尽最大努力尝试访问主机,但防火墙和服务器配置可能会阻止请求,从而导致无法访问状态,而某些特定端口可能可访问。如果可以获得特权,则典型的实现将使用 ICMP ECHO 查询,否则它将尝试在目标主机的端口 7 (Echo) 上建立 TCP 连接。


答案 2

假设您对协议有一定程度的控制,我非常喜欢发送检测信号来验证连接是否处于活动状态。它被证明是最能防止故障的方法,并且在连接断开时通常会为您提供最快的通知。

TCP保持警示符将起作用,但是如果远程主机突然断电怎么办?TCP 可能需要很长时间才能超时。另一方面,如果你的应用中有逻辑,该逻辑期望每 x 秒有一次检测信号回复,则当你第一次未获得检测信号时,你就知道连接不再有效,无论是由于网络还是远程端的服务器问题。

有关更多讨论,请参阅是否需要检测信号才能使 TCP 连接保持打开状态?


推荐