套接字:使用 Java 发现端口可用性
如何使用 Java 以编程方式确定给定计算机中端口的可用性?
即给定一个端口号,确定它是否已被使用?
如何使用 Java 以编程方式确定给定计算机中端口的可用性?
即给定一个端口号,确定它是否已被使用?
/**
* Checks to see if a specific port is available.
*
* @param port the port to check for availability
*/
public static boolean available(int port) {
if (port < MIN_PORT_NUMBER || port > MAX_PORT_NUMBER) {
throw new IllegalArgumentException("Invalid start port: " + port);
}
ServerSocket ss = null;
DatagramSocket ds = null;
try {
ss = new ServerSocket(port);
ss.setReuseAddress(true);
ds = new DatagramSocket(port);
ds.setReuseAddress(true);
return true;
} catch (IOException e) {
} finally {
if (ds != null) {
ds.close();
}
if (ss != null) {
try {
ss.close();
} catch (IOException e) {
/* should not be thrown */
}
}
}
return false;
}
他们还在检查DatagramSocket,以检查该端口在UDP和TCP中是否可用。
希望这有帮助。
对于 Java 7,您可以使用 try-with-resource 来获取更紧凑的代码:
private static boolean available(int port) {
try (Socket ignored = new Socket("localhost", port)) {
return false;
} catch (IOException ignored) {
return true;
}
}