2012-10-15 134 views
7

我正在嘗試爲TCP連接生成一個隨機端口號。 From:http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers我知道端口範圍從1024到49151不保留,但其中一些只是UDP,我怎樣才能生成唯一有效的TCP端口號?TCP的允許端口範圍

+1

對於TCP客戶端,高於1024的所有內容都被認爲是正確的。如果你需要在維基百科頁面上看到一個條目作爲「可接受」的TCP端口,你就會考慮這個問題。所有TCP端口= <1024都適用於客戶端套接字源端口。 –

回答

15

如果綁定到端口0,操作系統將選擇一個有效的未使用端口。

如果您需要隨機而不是任意的,那麼49152-65535中的任何內容都應該是安全的,以便自動使用,所以只需在該範圍內選擇一個隨機數。 (但是,如果該端口原來處於使用狀態,則可能必須重試。)

+0

因此,該範圍內的任何端口都將支持TCP?因爲從維基頁面,一些端口只被標記爲UDP。另外,如果端口正在使用,我將如何檢查java?謝謝! –

+1

1-65535的所有端口都支持TCP,該頁面上列出的TCP/UDP是指已註冊的端口;也就是分配給特定用途的端口。檢查一個端口是否處於使用狀態通常是通過試圖綁定端口來完成的,如果你得到一個關於正在使用的端口的錯誤,那麼它就是這樣。如果你得到的是什麼端口並不重要,但只要你得到一個端口,那麼你應該綁定端口0,然後從你的新套接字獲得本地端口,以找出你得到的。 – Eric

+2

爲了闡述一下,你的本地服務器綁定到一個特定的端口,但UDP和TCP在不同的「命名空間」,所以是獨立的。使用_both_的服務器通常會爲兩者打開相同的端口號。 _Connections_由協議的5元組,local-addr,local-port,remote-addr,remote-port定義,這解釋了爲什麼你不會發生串擾等等。 –