我参与检查端口可用性的代码(打开连接并立即关闭它):
try{
new ServerSocket(currentConnector.getPort()).close();
}
这里的问题是端口进入TIME_WAIT状态,这在系统与系统之间是不同的。
我想确保在close()
端口可用之后。
我能想到的一种方法是增加60-90秒的睡眠时间。但它看起来并不优雅。
我可以使用Java(没有bash / batch)验证端口是从TIME_WAIT发布的吗?
谢谢!
答案 0 :(得分:1)
如果有人连接了端口,端口只会进入TIME-WAIT。
您可以通过以下方式克服BindException
:
ServerSocket ss = new ServerSocket();
ss.setReuseAddress(true);
ss.bind(new InetSocketAddress(port));
但我质疑目标。如果你想在端口监听,请听它,然后抓住异常。如果要查看是否可以连接到它,请连接到它,并在出现异常时处理它。试图预测未来的技术最终只是算命。不合理的技术。检测是否有任何资源可用的正确方法只是尝试以正常方式使用它。任何其他东西都可能出现漏报,误报和时间窗问题。