在JAVA中如何连接并等待端口完成TIME_WAIT

时间:2015-03-14 09:32:39

标签: java tcp port time-wait

我参与检查端口可用性的代码(打开连接并立即关闭它):

try{
   new ServerSocket(currentConnector.getPort()).close();
 }

这里的问题是端口进入TIME_WAIT状态,这在系统与系统之间是不同的。 我想确保在close()端口可用之后。

我能想到的一种方法是增加60-90秒的睡眠时间。但它看起来并不优雅。

我可以使用Java(没有bash / batch)验证端口是从TIME_WAIT发布的吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 如果有人连接了端口,端口只会进入TIME-WAIT。

  2. 您可以通过以下方式克服BindException

    ServerSocket ss = new ServerSocket();
    ss.setReuseAddress(true);
    ss.bind(new InetSocketAddress(port));
    
  3. 但我质疑目标。如果你想在端口监听,请听它,然后抓住异常。如果要查看是否可以连接到它,请连接到它,并在出现异常时处理它。试图预测未来的技术最终只是算命。不合理的技术。检测是否有任何资源可用的正确方法只是尝试以正常方式使用它。任何其他东西都可能出现漏报,误报和时间窗问题。