如何检查是否一个Socket当前连接在Java中? [重复](How do I check if

2019-07-05 11:10发布

这个问题已经在这里有一个答案:

  • Java的套接字API:如何判断一个连接已经关闭? 7个回答

我试图找出一个Java TCP套接字目前是否已连接,下面似乎只是告诉我插座是否已经连接在某个时刻-不在于它是目前仍在连接。

socket.isConnected();

任何帮助表示赞赏,感谢。

Answer 1:

  • socket.isConnected()一旦客户端连接(甚至断开连接后)怪异返回总是如此!
  • socket.getInputStream().read()
    • 使线程等待输入,只要客户端连接,因而使你的程序没有做任何事情 - 除非你得到一些输入
    • returns -1如果客户端断开连接
  • socket.getInetAddress().isReachable(int timeout) :从isReachable(INT超时)

    测试地址是否可达。 尽力通过实施作出努力到达主机,但防火墙和服务器配置可能会阻止导致无法访问的状态,而一些特定的端口,可访问请求。 一个典型的实现将使用ICMP echo请求,如果能获得特权,否则将尝试建立目标主机的端口TCP连接7(回声)。



Answer 2:

假设你已经在协议控制的一定程度上,我心跳发送来验证连接是活动的忠实粉丝。 它被证明是最失败的证明方法和当连接已经断开会经常给你最快的通知。

TCP持久的工作,但如果远程主机突然断电呢? TCP可能需要很长的时间来超时。 在另一方面,如果你在你的应用程序逻辑需要一个心跳回复每x秒,第一次你没有得到他们,你知道的连接不再工作,无论是在远程端网络或服务器问题。

见我需要的心跳,保持TCP连接打开? 更多的讨论。



文章来源: How do I check if a Socket is currently connected in Java? [duplicate]
标签: java sockets tcp