1、mfc c++服務器端放在外網服務器,兩客戶端放同一個局域網、兩客戶端放同一電腦上 p2p打洞不成功,
2、mfc c++服務器端放在外網服務器,兩客戶端放不是同一個局域網 ,可以打洞成功,
3、mfc c++服務器端,兩客戶端放 3個運行在同一個電腦上 ,測驗也可以打洞成功。
請問 第一種情況是怎么回事,有沒有成功的p2p打洞原始碼呢, 請高手賜教 ,謝謝!!!
uj5u.com熱心網友回復:
坊間傳聞:打洞成功與否,決定于路由器。uj5u.com熱心網友回復:
打洞本來就是跨網段干的,同一局域網不需要打洞,至少QQ為什么可以實作p2p,是因為QQ背后強大的大資料支持,知道誰和誰是同一局域網的,采用直連uj5u.com熱心網友回復:
1、mfc c++服務器端放在外網服務器,兩客戶端放同一個局域網、兩客戶端放同一電腦上 p2p打洞不成功,同一個電腦是不是客戶端固定了udp埠??
我用別人的p2p punch 代碼測驗過,作業還可以,兩個不同內網都可以通過p2p打洞。
uj5u.com熱心網友回復:
這個問題很有趣,同一個局域網,兩臺機器打洞測驗過沒有?理論上兩客戶端放同一客戶端打洞應該能成功,如果不成功,只能說是網關的問題了,是不是會拒絕局域網內對外放埠的訪問,猜測是這樣的,自己連接自己映射的對外埠,那就成了自己連自己,會直接拒絕,正常的做法,打孔服務器應該有客戶端的基本資訊,比如MAC地址,局域網IP,埠,同一個局域網因為用的是同一個網關,路由基本是相同的,特別同一臺機器,所以比較容易用一些其本資訊直接給出是不是同一個局域網的,回傳的打孔資訊應該有兩部分,一部分是猜測局域網資訊,直接連接,做較驗,這個速度很快,如果連不上,再用廣域網地址連接。uj5u.com熱心網友回復:
因為路由器對內網主機, 他們的外網IP是相同的, 只是埠不同.路由器對這種 發給內網主機的資料, 使用外網IP是拒絕的. 他給你丟棄了.
所以你的第一種方式, 打不通.
只要需要打洞的兩個主機在同一個內網, 而打洞服務在外網的情況, 都是打不通的.
解決辦法就是: 兩個客戶端都向打洞服務器發送內網IP, 然后打洞服務器就可以向兩個客戶端回傳內網和外網IP,
當發現外網IP相同, 就嘗試使用內網IP連接, 就可以解決在內網的情況.
這里有我的實作代碼.
https://github.com/Justysxh/udp-nat-traversal 客戶端
https://github.com/Justysxh/UdpHoleServer 打洞服務器端
uj5u.com熱心網友回復:
http://blog.csdn.net/wutong_login/article/details/8169717我前面講的有些錯誤, 這個連接中講得很詳細.
關鍵字: hairpin NAT
只有支持 hairpin nat 的路由器, 才能讓 同一個內網中的主機之間, 使用它們的外網ip和埠來相互訪問.
uj5u.com熱心網友回復:
鏈接里面的博主真是路由達人啊!大寫的牛!Orz
uj5u.com熱心網友回復:
確實, 還是趙老師見多識廣,交友廣闊.金山云高級總監 武愛敏
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/88190.html
標籤:網絡編程
上一篇:QT實作滑鼠旋轉圖片關聯背景旋轉
