gpt4 book ai didi

java - 寻找两个空闲的 tcp 端口

转载 作者:可可西里 更新时间:2023-11-01 02:31:39 30 4
gpt4 key购买 nike

我知道下面的代码可以(可能不是很有效)在 Java 中找到空闲的 TCP 端口:

  public static int findFreePort() {
int port;
try {
ServerSocket socket= new ServerSocket(0);
port = socket.getLocalPort();
socket.close();
} catch (Exception e) { port = -1; }
return port;
}

(SO - for example 中有一些相关问题)。

我不明白的是为什么(或是否)两次连续调用此方法一定会返回两个不同的端口。这是假定的,例如,here (搜索对 findFreePort 方法的调用)。

这是正确的吗?

最佳答案

在 Javadoc 规范中,我没有看到任何一行说明两次连续调用保证返回两个不同的端口...

由于 ServerSocket 已关闭,第二次调用可能会提供相同的端口。从统计学上讲,我认为这是不可能的,但并非不可能。

如果您打开两个 ServerSocket,获取端口,然后关闭两个 ServerSocket,您肯定会获得两个不同的端口(因为创建第二个 ServerSocket 时第一个端口不是空闲的)。

获取n个不同空闲端口的示例方法:

public int[] getFreePorts(int portNumber) throws IOException {
int[] result = new int[portNumber];
List<ServerSocket> servers = new ArrayList<ServerSocket>(portNumber);
ServerSocket tempServer = null;

for (int i=0; i<portNumber; i++) {
try {
tempServer = new ServerSocket(0);
servers.add(tempServer);
result[i] = tempServer.getLocalPort();
} finally {
for (ServerSocket server : servers) {
try {
server.close();
} catch (IOException e) {
// Continue closing servers.
}
}
}
}
return result;
}

关于java - 寻找两个空闲的 tcp 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3265825/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com