2016-07-24 195 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

感謝您的答案,但我不知道這是如何與我的問題在同一臺機器上發送/接收問題,特別是因爲使用本地主機地址解決了問題。 –