2016-07-24 156 views
1

我试图使用两个单独的程序从同一台机器发送和接收UDP数据包,但到目前为止我还没有能够收到任何东西。我试图完全关闭我的防火墙,但仍然无法正常工作。无法接收UDP数据包

发送程序

var sender = new UdpClient(Dns.GetHostName(), 2055); 

var data = new byte[] { 0, 1, 2, 3, 4, 5 }; 
sender.Send(data, data.Length); 

接收程序

var receiver = new UdpClient(2055); 

var endPoint = new IPEndPoint(IPAddress.Any, 2055); 
var data = receiver.Receive(ref endPoint); 
System.Console.WriteLine("Data received"); 

我甚至复制并粘贴代码,本教程http://www.codeproject.com/Articles/10649/An-Introduction-to-Socket-Programming-in-NET-using,仍然没有成功。

+1

什么是'Dns.GetHostName()'?它不应该是'127.0.0.1'吗? –

+0

啊,这工作!你可以发布一个答案(以便我可以选择它作为解决方案),并解释一下为什么这个工程,而不是Dns.GetHostName()?我在同一台机器上使用GetHostName()和TCP连接。 –

+0

当然,很高兴我们能够帮助:) –

回答

0

的问题是var sender = new UdpClient(Dns.GetHostName(), 2055);

您需要指定本地主机的IP是127.0.0.1,因为你是在同一台机器上。这应该工作:

var sender = new UdpClient("127.0.0.1", 2055);

0

About multicast IP addresses and ports (TechNet)

多播IP地址是落在两个范围内的类-d地址:通过239.255.255.255和224.0.0.0 FF00:0000:0000:0000:0000:0000:0000 :0000至FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF。第一个范围内的地址是Internet协议版本4(IPv4)地址。第二个范围中的地址是Internet协议版本6(IPv6)地址。

对于内联网使用,建议您使用范围为239. 的IPv4地址。。*。端口号可以介于1到65535之间。您传输内容的网络中的路由器必须启用多播,这意味着它们必须能够解释D类地址,否则它们将无法转发您的多播信息给客户。

由于网络级别的过滤,您必须使用此范围内的IP地址。在Wikipedia上有一张commonly-used multicast addresses的表格。

事实上,本教程你正在使用笔记这也太:

UDP还支持多播即发送一个数据包到多个接收者。为此,发送方将数据包发送到范围为224.0.0.1 - 239.255.255.255(D类地址组)的IP地址。

+0

感谢您的答案,但我不知道这是如何与我的问题在同一台机器上发送/接收问题,特别是因为使用本地主机地址解决了问题。 –