我正在尝试在相邻端口上初始化两个DatagramSockets:
int iport = 5000;
DatagramSocket sock1 = new DatagramSocket(iport);
DatagramSocket sock2 = new DatagramSocket(iport + 1);
但是,如果端口5000或5001不可用,则会失败。我不关心我绑定到哪个端口,只要它们满足sock1.getPort() + 1 == sock2.getPort()
的条件。是否有一种简单的方法可以找到两个相邻的端口,而无需迭代所有可用的端口并尝试绑定到每个端口,直到找到两个可用的端口?
答案 0 :(得分:0)
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已经被绑定的可能性很小。