2017-10-12 95 views
-1

我想初始化相邻端口的两个DatagramSockets这样:DatagramSocket类的Java绑定两个连续的开放端口

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

但是,如果端口5000或5001不可用失败。我不关心我绑定到什么端口,只要它们满足条件sock1.getPort() + 1 == sock2.getPort()。有没有简单的方法来找到两个相邻的端口,而无需遍历所有可用的端口,并试图绑定到每个端口,直到我找到两个工作?

+1

您可能想要选择尚未保留给其他协议的端口:_ [服务名称和传输协议端口号注册表](https://www.iana.org/assignments/service-names-port-numbers/service-名端口-numbers.xhtml)_。 –

+0

为什么?这个要求是完全不切实际的。如果你不在乎它们是什么,为什么你会在意它们相邻?为什么你需要两个插座? – EJP

+0

我与服务器进行通信,无论出于何种原因,都会向比我发送的端口高的端口发送响应。虽然没有太多意义,但我无法访问服务器代码... – kmell96

回答

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已经被绑定。