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