使用 UdpLink 进行 NAT 穿透之后, 将与对方建立一条 UDP 连接. 该 UdpLink 可以用来生成提供可靠传输服务的 Channel, 也可以直接使用其 UDP Socket.
IPEndPoint remoteEP = new IPEndPoint(IPAdress.Parse("2.2.2.2"), 12345); UdpLink link = new UdpLink(); link.Udp = new UdpClient(); link.RemoteEndPoint = remoteEP; // 设置对方节点的公网地址. link.ReadKey = "my key +"; // 建立连接时期望从对方接收到的口令. link.SendKey = "his key -"; // 建立连接时对方期望的口令. link.Start(); // 进行 NAT 穿透.
当 Start() 方法成功返回时, NAT 穿透已经完成, 否则会抛出一个异常. UdpLink 可以应用在以下网络结构: No-NAT -- Any, Cone NAT -- Any, Loose Symmetric NAT -- Any.
备注:
- 本文是关于我的 P2P SDK 的介绍的一部分, 详细文档请见 http://www.ideawu.com/p2p/
- Loose Symmetric NAT 是指某些有"loose matching behavior"的 Symmetric NAT, 详见 P2P穿透NAT的思路
- 微软的 Windows NAT 有"loose matching behavior", 但不是 Symmetric NAT: Microsoft Windows Server TechCenter: How NAT Works