我正試圖圍繞網絡套接字來包裹我的頭。到目前爲止,我的理解是,服務器創建一個綁定到特定端口的新套接字。然後它偵聽此套接字來處理客戶端請求。是否爲每個請求創建了新套接字?
我讀過這個教程http://docs.oracle.com/javase/tutorial/networking/sockets/definition.html和它說
如果一切順利的話,服務器接受連接。一旦接受, 服務器獲得一個綁定到同一本地端口的新套接字,並且其 的遠程端點設置爲客戶端的地址和端口。它需要 一個新的套接字,以便它可以繼續偵聽原始套接字的連接請求,同時趨向於連接的客戶端的需要。
這裏有幾件事情,我不太明白
如果一切順利的話,服務器接受連接。
- 這是否意味着客戶端請求已成功到達偵聽套接字?
一旦接受,服務器獲取綁定到相同的本地端口一個新的套接字和 也有它的遠程端點集到客戶端的地址和端口
新套接字已創建。它也綁定到相同的端口,但它不偵聽傳入的請求。服務器處理的客戶端請求響應被寫入此套接字後,然後關閉。這是對的嗎?
這是否意味着請求以某種方式從第一個套接字傳遞到第二個套接字?
因此,將創建新的套接字然後,對於傳入請求進行偵聽。是否有不同類型的插座?某種「聽」插座和其他?
爲什麼服務器必須創建一個新的偵聽套接字?爲什麼它不能重複使用前一個?
它需要一個新的插座,以便它可以繼續收聽到原來的 插座連接請求,而趨向於連接的客戶端的需求。
關於1,_「[服務器是否接受連接]意味着客戶端請求已成功到達偵聽套接字?」_:「accept()」的結果_is_是一個正在工作的偵聽套接字。 – CodeCaster
@CodeCaster編號accept()的結果是工作的*活動*套接字。監聽套接字是被動套接字:參見4(b)。就像OP一樣,你濫用術語'聆聽'。 – EJP
你說得對,我現在看到它。謝謝。 – CodeCaster