在Java中,您可以将数字0作为Socket或DatagramSocket构造函数的单个参数。 Java将Socket绑定到一个空闲端口。是否可以将端口查找限制在特定范围内?
答案 0 :(得分:7)
Hrm,在阅读完文档之后,我认为你无法做到。您可以绑定到任何端口,然后重新绑定(如果不可接受),或重复绑定到范围中的端口,直到成功为止。第二种方法将是最“有效”的。
我对这个答案感到不安,因为它不太优雅,但我真的找不到任何其他东西:/
答案 1 :(得分:2)
将套接字绑定到任何空闲端口(通常)是操作系统套接字支持的一项功能;它不是特定于java。例如,Solaris支持通过 ndd 命令调整临时端口范围。但只有root可以调整范围,它会影响整个系统,而不仅仅是你的程序。
如果常规的短暂绑定行为不适合您的需要,您可能必须使用Socket.bind()编写自己的。
答案 2 :(得分:2)
以下是您需要的代码:
public static Socket getListeningSocket() {
for ( int port = MIN_PORT ; port <= MAX_PORT ; port++ )
{
try {
ServerSocket s = new ServerSocket( port );
return s; // no exception means port was available
} catch (IOException e) {
// try the next port
}
}
return null; // port not found, perhaps throw exception?
}
答案 3 :(得分:0)
您可能会看一下实现您正在使用的函数的java代码。大多数java库都是用Java编写的,所以你可能只看到你需要的东西。
假设@Kenster是正确的并且它是一个系统操作,您可能只需要迭代尝试绑定到每个端口或测试它的端口。虽然它有点痛苦,但它不应该超过几行代码。