這是一個普通套接字問題。在Java中,如果我有一個ServerSocket綁定到特定的端口,比如說4444,我知道它正在監聽連接請求。 accept()方法阻塞,直到收到連接請求,並返回一個新的Socket與客戶端進行通信。返回的Socket的遠程端點是客戶端的IP地址和端口。由ServerSocket.accept返回的Java客戶端套接字()
但是,我感到困惑的是返回的Socket的本地端口與正在偵聽請求的ServerSocket的端口號相同(在本例中爲4444)。我認爲兩個套接字不能綁定到同一個端口?返回的Socket是不是服務器上的不同端口?
我明白了。所以,從理論上講,如果我是一個客戶端連接到2個帶有2個套接字的不同服務器,那麼只要端點不同,臨時端口(由系統分配)可以是相同的?我不可能真的看到這種情況發生,但理論上它可以起作用嗎? – Pattay 2012-08-10 16:49:43
我相信如此,但我從來沒有見過這種。 – 2012-08-10 20:52:40
你不會在出站連接上看到它,因爲bind()在內核中的connect()之前(即使是隱式的),並且在執行時不知道連接目標,所以在給定時必須找到一個空閒的本地端口號零端口號。 – EJP 2012-08-11 02:24:25