雙方都在局域網內就沒有辦法TCP直連了,因此像QQ等都會盡可能使用UDP直連的 IP地址轉換不須要你處理,網關默認就已經進行了轉換。服務器接收到DatagramPacket中getAddress和getPort已是網關的端口 UDP打洞的過程大體如此: 一、雙方都經過UDP與服務器通信後,網關默認就是作了一個外網IP和端口號 與你內網IP與端口號的映射,這個無需設置的,服務器也不須要知道客戶的真正內網IP 二、用戶A先經過服務器知道用戶B的外網地址與端口 三、用戶A向用戶B的外網地址與端口發送消息, 四、在這一次發送中,用戶B的網關會拒收這條消息,由於它的映射中並無這條規則。 五、可是用戶A的網關就會增長了一條容許規則,容許接收從B發送過來的消息 六、服務器要求用戶B發送一個消息到用戶A的外網IP與端口號 七、用戶B發送一條消息,這時用戶A就能夠接收到B的消息,並且網關B也增長了容許規則 八、以後,因爲網關A與網關B都增長了容許規則,因此A與B均可以向對方的外網IP和端口號發送消息
對於這個過程的瞭解,能夠看如下博客java
http://blog.csdn.net/jdh99/article/details/6667648服務器
------------------------------------------------------------------------------------------網絡
經過UDP路由驗證明現NAT穿越是一種在處於使用了NAT的私有網絡中的Internet主機之間創建雙向UDP鏈接的方法。因爲NAT的行爲是非標準化的,所以它並不能應用於全部類型的NAT。spa
其基本思想是這樣的:讓位於NAT後的兩臺主機都與處於公共地址空間的、衆所周知的第三臺服務器相連,而後,一旦NAT設備創建好UDP狀態信息就轉爲直接通訊,並寄但願於NAT設備會在分組實際上是從另一個主機傳送過來的狀況下仍然保持當前狀態。.net
這項技術須要一個圓錐型NAT設備纔可以正常工做。對稱型NAT不能使用這項技術。code
這項技術在P2P軟件和VoIP電話領域被普遍採用。它是Skype用以繞過防火牆和NAT設備的技術之一。orm
相同的技術有時還被用於TCP鏈接——儘管遠沒有UDP成功。blog