1. 原理
打洞过程
(1)ClientA请求Server。
(2)ClientB请求Server。
(3)Server把ClientA的IP和端口信息发给ClientB。
(4)Server把ClientB的IP和端口信息发给ClientA。
(5)ClientA利用信息给ClientB发消息。(A信任B)
(6)ClinetB利用信息给ClientA发消息。(B信任A)
(7)连接已经建立。两者可以直接通信了。
//--------------------------------------------------------------
但是这里一定要注意,能用UDP打洞成功是有要求的,不能是两个NAT设备都是对称类型的。如果一个是对称类型,一个是cone类型的NAT,这种情况下还可以使用预测法。网上可以找到对应的论文,大家可以去看看。我这里的成功是基于两端都是cone NAT类型设备的。
//--------------------------------------------------------------
2. 代码实现
服务器代码
https://gitee.com/hongyingheng/UDPServerDemo
客服端代码
https://gitee.com/hongyingheng/UDPClientDemo