udp既然不是長鏈接,那么當udp服務器接收到資料后可以回傳一串資料是什么原理,服務器發出的資料是如何找到客戶端的呢?
uj5u.com熱心網友回復:
當UDP客戶端發送資料包給UDP服務端的時候,資料包包里已經包含客戶端的IP地址和埠號了,所以服務器直接對客戶端的IP地址和埠號發回應包就可以了。uj5u.com熱心網友回復:
服務器可以獲取到淶源的ip和埠這不錯,當時當服務器向客戶端發送資料的程序該如何理解呢?這個程序相當于客戶端開了一個ip和埠監聽來自服務器的請求,這個短時間段內客戶端也相當于服務器嗎?
uj5u.com熱心網友回復:
實際上網路通信時,使用的都是SOCKET,當是服務器時,是要開啟SOCKET的監聽的,這樣其它的客戶端就可以連接到服務器的,當連接成功后,服務器和客戶端之間就建立了SOCKET連接,雙方就可以發送資料了。
所以服務器和客戶機不同就是服務器可以監聽其它計算的連接,允許其它終端的連接,而客戶機不監聽,不允許其它終端的連接,但當SOCKET連接成功后,雙方的地位地相等的,就可以通過這個SOCKET相互發送訊息了。
uj5u.com熱心網友回復:
而對于QQ這樣的服務器,好友之間的訊息是靠服務器進行轉發的,應該屬于業務邏輯的范圍uj5u.com熱心網友回復:
當UDP客戶端發送資料包給UDP服務端的時候,資料包包里已經包含客戶端的IP地址和埠號了,所以服務器直接對客戶端的IP地址和埠號發回應包就可以了。
服務器可以獲取到淶源的ip和埠這不錯,當時當服務器向客戶端發送資料的程序該如何理解呢?這個程序相當于客戶端開了一個ip和埠監聽來自服務器的請求,這個短時間段內客戶端也相當于服務器嗎?
當服務器回傳的資料給客戶端時,客戶端的socket還沒有被關閉時,協議堆疊會檢查服務器的資料的目的IP地址和埠號是否跟還繼續打開的socket相匹配,如果匹配上了,上層呼叫recvfrom就會收到該資料。如果客戶端關閉了socket,那IP地址和埠號必然匹配不上,資料包就無法到達socket層面,會被丟棄掉。這個時間段應該不算是服務端,服務端應該是在協議堆疊socket層面進行bind過的埠。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/53018.html
標籤:網絡通信
上一篇:想做一個密集異構網路的仿真,用OMNET++還是OPNET方便呢?
下一篇:長城網路遷移
