C#如何在没有端口转发的情况下通过UDP发送字符串?

时间:2017-05-31 10:15:07

标签: c# udp

我需要一些类似的东西:

        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发送字符串?

1 个答案:

答案 0 :(得分:0)

您可以使用NAT hole punching,它不需要手动端口转发配置。这是一项非常简单的技术。请注意,远程端点(接收方)也应该实现它,而不仅仅是发送方。

在最简单的情况下,它的作用如下:

[sender] <-> |internet| <-> [remote router with NAT] <-> [receiver]

请注意sender不在NAT后面。

senderIP:portXreceiverIP:portY打洞: sender绑定到portX并等待来自receiver的通信初始化。 receiver绑定到portY并向senderIP:portX发送虚拟数据包。 sender从包中获取receiverIP(实际上是其路由器IP)和portY,现在将有意义的数据发送到此地址。 NAT记得与senderIP:portX的通信来自receiver本地IP和portY,因此所有数据都来自senderIP:portX到路由器的portY将被重定向到receiver的本地IP。

对于senderreceiver都在NAT后面的情况,您需要一个集合点服务器,详细信息请查看链接。