【发布时间】:2011-03-17 00:01:55
【问题描述】:
我知道下面的代码可以(可能不是很有效)在 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 方法的调用)。
这是正确的吗?
【问题讨论】:
-
如果有相关问题,您应该引用它们并链接到它们。
-
由于 SO_WAIT 而没有重新分配它,这是一种旨在避免仍在传输中的数据包会被另一个进程接收的机制。默认情况下,关闭一个 TCP 端口,在接下来的 2 分钟内不会重新分配它以允许这些滞留数据包刷新。
-
在我看来,这种行为可能很常见,但只是依赖于实现,不是吗? tcpipguide.com/free/…technet.microsoft.com/en-us/library/cc759700(v=ws.10).aspx
-
我不知道这是否是一个标准,但绝对是一个很好的安全/隐私措施。