DatagramSocket类的Java绑定两个连续的开放端口
问题描述:
我想初始化相邻端口的两个DatagramSockets这样:DatagramSocket类的Java绑定两个连续的开放端口
int iport = 5000;
DatagramSocket sock1 = new DatagramSocket(iport);
DatagramSocket sock2 = new DatagramSocket(iport + 1);
但是,如果端口5000或5001不可用失败。我不关心我绑定到什么端口,只要它们满足条件sock1.getPort() + 1 == sock2.getPort()
。有没有简单的方法来找到两个相邻的端口,而无需遍历所有可用的端口,并试图绑定到每个端口,直到我找到两个工作?
答
DatagramSocket()
让操作系统为你选择一个空闲端口,而DatagramSocket(port)
试图获得一个特定的端口。
所以,你可以做这样的:
DatagramSocket sock1 = null;
DatagramSocket sock2 = null;
while (sock2 == null) {
sock1 = new DatagramSocket();
try {
sock2 = new DatagramSocket(sock1.getLocalPort() + 1);
} catch (java.net.BindException ex) {
sock1.close();
}
}
的while
循环是因为这里有一个非常小的机会,sock1的端口+ 1已经被绑定。
您可能想要选择尚未保留给其他协议的端口:_ [服务名称和传输协议端口号注册表](https://www.iana.org/assignments/service-names-port-numbers/service-名端口-numbers.xhtml)_。 –
为什么?这个要求是完全不切实际的。如果你不在乎它们是什么,为什么你会在意它们相邻?为什么你需要两个插座? – EJP
我与服务器进行通信,无论出于何种原因,都会向比我发送的端口高的端口发送响应。虽然没有太多意义,但我无法访问服务器代码... – kmell96