2017-10-12 157 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已經被綁定。