Java DatagramSocket绑定到两个连续的开放端口

时间:2017-10-12 02:03:17

标签: java sockets networking port

我正在尝试在相邻端口上初始化两个DatagramSockets:

int iport = 5000;
DatagramSocket sock1 = new DatagramSocket(iport);
DatagramSocket sock2 = new DatagramSocket(iport + 1);

但是,如果端口5000或5001不可用,则会失败。我不关心我绑定到哪个端口,只要它们满足sock1.getPort() + 1 == sock2.getPort()的条件。是否有一种简单的方法可以找到两个相邻的端口,而无需迭代所有可用的端口并尝试绑定到每个端口,直到找到两个可用的端口?

1 个答案:

答案 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已经被绑定的可能性很小。