我需要一些类似的东西:
var client = new UdpClient();
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("23.114.44.195"), 11000);
client.Connect(ep);
byte[] data = Encoding.ASCII.GetBytes("test");
client.Send(data, data.Length);
侦听器在PORT:11000上运行该IP,但我不希望在我的路由器中向前移动(因为我想发布此应用程序)。
所以,问题是:如何在没有端口转发的情况下通过UDP发送字符串?
答案 0 :(得分:0)
您可以使用NAT hole punching,它不需要手动端口转发配置。这是一项非常简单的技术。请注意,远程端点(接收方)也应该实现它,而不仅仅是发送方。
在最简单的情况下,它的作用如下:
[sender] <-> |internet| <-> [remote router with NAT] <-> [receiver]
请注意sender
不在NAT后面。
从senderIP:portX
到receiverIP:portY
打洞:
sender
绑定到portX
并等待来自receiver
的通信初始化。 receiver
绑定到portY
并向senderIP:portX
发送虚拟数据包。 sender
从包中获取receiverIP
(实际上是其路由器IP)和portY
,现在将有意义的数据发送到此地址。 NAT记得与senderIP:portX
的通信来自receiver
本地IP和portY
,因此所有数据都来自senderIP:portX
到路由器的portY
将被重定向到receiver
的本地IP。
对于sender
和receiver
都在NAT后面的情况,您需要一个集合点服务器,详细信息请查看链接。