2012-06-02 31 views
10

如果客戶端在http://socketplaceonnet.com的套接字偵聽套接字例如,它如何知道有新的內容?我假設服務器無法直接向客戶端發送數據,因爲客戶端可能在路由器後面,沒有端口轉發,因此無法實現直接連接。該cliet可能是一個手機,它改變了它的ip地址,所以我明白,客戶端是一個監聽器,服務器不需要知道clint的ip。如何偵聽套接字的工作原理

謝謝

+1

簡介[簡介](http://ssfnet.org/Exchange/tcp/tcpTutorialNotes.html)(與TCP協議有關)。 – Vidul

+2

連接直接或不連接都不會改變。字節(數據包)到達您的計算機(它可能是網卡上的緩衝區),因此信號會發送到您的軟件。 –

回答

46

客戶端套接字不偵聽傳入連接,它啓動到服務器的傳出連接。服務器套接字偵聽傳入的連接。

服務器創建套接字,將套接字綁定到IP地址和端口號(用於TCP和UDP),然後偵聽傳入連接。當客戶端連接到服務器時,會創建一個新的套接字與客戶端通信(僅限TCP)。輪詢機制用於確定是否在任何打開的套接字上發生任何活動。

客戶端創建套接字並連接到遠程IP地址和端口號(用於TCP和UDP)。可以使用輪詢機制(select(),poll(),epoll()等)監視來自服務器的信息的套接字而不阻塞線程。

在客戶端位於提供NAT(網絡地址轉換)的路由器後面的情況下,路由器會重新編寫客戶端的地址以匹配路由器的公共IP地址。當服務器響應時,路由器將其公有IP地址更改回客戶端的IP地址。路由器會保留一個正在轉換的活動連接表,以便它可以將服務器的響應映射到正確的客戶端。

+1

+1優秀並且在少於14行的情況下得到了很好的解釋:) –

+0

+1真的,它是非常好的,簡短而甜美的通信過程中服務器輪詢機制的解釋。謝謝。 –