網絡上的大多數UDP原理研究分析后,自己總結了下面的結果.
1、client A 登錄 通過http服務器 webservices 驗證成功獲取自身信息與好友
列表信息等。
2、Http服務器登記client A的NAT后的IP地址與端口
3、Client B登錄 通過http服務器 webservices 驗證成功獲取自身信息與好友列
表信息等。
4、Http服務器登記client B的NAT后的IP地址與端口
5、Client A想發送消息給Client B,向HTtp服務器獲取Client B的在線IP地址
6、Client A獲得Client B的IP地址后并發送UDP信息到Client B
7、Client A與Client B請求失敗,信息丟失,此時Client A報告Http服務器要求
服務器幫忙對Client B進行通知
8、Http服務器接到此命令后,將Client A的IP地址發給Client B,要求他連接
9、Client B收到HTTP服務器的信息后發送請求到 Client A
10、由于此時Client A NAT已經存在Clinet B的session,所以此時 Client A與
Client B建立鏈接成功。
11、Client A發送消息到 Client B成功,不經HTTP服務器中轉
總結:換句話說就是HTTP服務器啟動了“和事老”的功能。為不信任的兩個人發
出命令從而使他們達到了一種互相承認而此建立鏈接關系
其中最主要的是Server 的一個方法就是發送消息到被打洞的客戶端
客戶端發送消息需要判斷該消息是否發送成功,不成功則要求請求打洞.若成功則不需要要求打洞!
客戶端在接收到服務器的打洞指令后,則作出UDP發送響應
from:http://blog.csdn.net/wenzhoufeng/archive/2007/03/27/1542733.aspx