鍍金池/ 問答/Linux  網(wǎng)絡安全/ linux下tcp通信 ----- 如何實現(xiàn)兩客戶端通信,且服務端不做消息轉發(fā)

linux下tcp通信 ----- 如何實現(xiàn)兩客戶端通信,且服務端不做消息轉發(fā)

剛剛實現(xiàn)了兩客戶端通信(linux下tcp協(xié)議),實現(xiàn)思路很簡單,就是一個客戶端發(fā)個消息,服務端先read到然后再write到另一個客戶端,這樣就行了。

仔細思考后,有個疑問,可不可以服務端不read,直接讓另一個客戶端去read,這樣服務端的負擔不就減輕了么。

剛接觸tcp通信,求指導。給個思路或者直接丟個代碼。

回答
編輯回答
祉小皓

這取決于兩客戶端的網(wǎng)絡連接,分三種情況

  1. 直連,雙方都沒有使用 NAT(網(wǎng)絡地址轉換)設備(如路由器)
  2. 一方使用了 NAT 設備
  3. 雙方都使用了 NAT 設備

前面兩種均可實現(xiàn)兩個客戶端直連,第三種則視 NAT 設備能否預測端口而定,大部分也都可以直連。

想要了解更多技術細節(jié),請搜索 "tcp traversal", "tcp hole punching", "nat traversal", "TCP 打洞" 等關鍵詞。

參考資料

  1. https://en.wikipedia.org/wiki...
  2. https://en.wikipedia.org/wiki...
  3. https://github.com/dwoz/pytho...
2017年7月30日 19:47