【问题标题】:In JAVA how to connection and wait for port to finish TIME_WAIT在 JAVA 中如何连接并等待端口完成 TIME_WAIT
【发布时间】:2015-05-16 19:57:20
【问题描述】:

我有一部分代码检查端口可用性(打开连接并立即关闭它):

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

这里的问题是端口进入 TIME_WAIT 状态,该状态因系统而异。 我想确保在close() 之后端口可用。

我能想到的一种方法是增加 60-90 秒的睡眠时间。但它似乎不是很优雅。

我可以使用 Java(不使用 bash/batch)验证端口已从 TIME_WAIT 释放吗?

谢谢!

【问题讨论】:

    标签: java tcp port time-wait


    【解决方案1】:
    1. 端口只有在有人连接时才会进入 TIME-WAIT。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多