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

问题描述 投票:-1回答:1

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

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

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

java sockets networking port
1个回答
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已经被绑定的可能性很小。

© www.soinside.com 2019 - 2024. All rights reserved.