在 JAVA 如何连接并等待端口完成 TIME_WAIT
In JAVA how to connection and wait for port to finish TIME_WAIT
我在检查端口可用性的代码中有一部分(打开连接并立即关闭它):
try{
new ServerSocket(currentConnector.getPort()).close();
}
这里的问题是端口进入 TIME_WAIT 状态,这因系统而异。
我想确保在 close()
之后端口可用。
我能想到的一种方法是增加 60-90 秒的睡眠时间。但它似乎不是很优雅。
我可以用 Java (w/o bash/batch) 验证端口是从 TIME_WAIT 释放的吗?
谢谢!
端口只有有人连接才会进入TIME-WAIT
您可以通过以下方式克服 BindException
:
ServerSocket ss = new ServerSocket();
ss.setReuseAddress(true);
ss.bind(new InetSocketAddress(port));
不过我质疑了objective。如果你想在端口上监听,那就监听它,然后捕获异常。如果您想查看是否可以连接到它,请连接到它并在出现异常时进行处理。试图预测未来的技术最终只是算命。技术不行。检测任何资源是否可用的正确方法只是尝试以正常方式使用它。其他任何事情都容易出现漏报、误报和时序问题-window。
我在检查端口可用性的代码中有一部分(打开连接并立即关闭它):
try{
new ServerSocket(currentConnector.getPort()).close();
}
这里的问题是端口进入 TIME_WAIT 状态,这因系统而异。
我想确保在 close()
之后端口可用。
我能想到的一种方法是增加 60-90 秒的睡眠时间。但它似乎不是很优雅。
我可以用 Java (w/o bash/batch) 验证端口是从 TIME_WAIT 释放的吗?
谢谢!
端口只有有人连接才会进入TIME-WAIT
您可以通过以下方式克服
BindException
:ServerSocket ss = new ServerSocket(); ss.setReuseAddress(true); ss.bind(new InetSocketAddress(port));
不过我质疑了objective。如果你想在端口上监听,那就监听它,然后捕获异常。如果您想查看是否可以连接到它,请连接到它并在出现异常时进行处理。试图预测未来的技术最终只是算命。技术不行。检测任何资源是否可用的正确方法只是尝试以正常方式使用它。其他任何事情都容易出现漏报、误报和时序问题-window。