我正在检查TCP端口的可用性,如下所示:
public static boolean isTCPPortAvailable(int hostPort) {
ServerSocket tempSocket = null;
try {
tempSocket = new ServerSocket();
// Enable Reuse before binding
tempSocket.setReuseAddress(true);
tempSocket.bind(new InetSocketAddress(hostPort));
return true;
}
catch (IOException ex) {
// Denotes that port is in use
}
finally {
if(tempSocket != null) {
try {
tempSocket.close();
}
catch (IOException e) {
// Not to be thrown
}
}
}
return false;
}
问题是即使端口处于LISTENING
状态,此方法也会返回true。任何人都可以帮我找到问题。
注意:我使用setReuseAddress(true)
忽略TIME_WAIT
州。
注意:我在Windows上。
答案 0 :(得分:0)
你不需要这些。只需使用端口零。系统将为您提供下一个可用端口。
注意IOException
不'表示该端口正在使用'。只有一些 BindExceptions
才能做到这一点。