以下簡單安排有什麼問題。我所做的只是創建一個多播消息的UDP廣告客戶,以及一個加入多播組以接收此消息的偵聽器,它們都運行在同一臺機器上。通過插座最簡單的廣告/收聽安排
string Port = "54153";
HostName Host = new HostName("224.3.0.5"); //a multicast range address
//listener
var L = new DatagramSocket();
L.MessageReceived += (sender2, args) => { /*something*/ };
await L.BindServiceNameAsync(Port);
L.JoinMulticastGroup(Host);
//advertiser
var AdvertiserSocket = new DatagramSocket();
AdvertiserSocket.Control.MulticastOnly = true;
Stream outStream = (await AdvertiserSocket.GetOutputStreamAsync(Host, Port)).AsStreamForWrite();
using (var writer = new StreamWriter(outStream))
{
await writer.WriteLineAsync("MESSAGE");
await writer.FlushAsync();
}
聽者完全不(MessageReceived
永遠不會調用)得到了什麼。我嘗試了以下變化,但沒有成功:
- 調用並未調用廣告客戶上的BindServiceNameAsync()。
- 在廣告客戶,聽衆或兩者上使用
MulticastOnly
- 在創建一個對象之前等待幾秒鐘。
- 使用
255.255.255.255
作爲主機。
請檢查是否[this similar case](http://stackoverflow.com/questions/38679646/uwp-datagramsocket-multicast/38739116#38739116)有幫助。 –
@ ElvisXia-MSFT:謝謝埃爾維斯。您提供的鏈接使用其中一個示例(UWP API示例中的scenario5)。這正是我開始的。這個示例的問題在於它使用一個'DatagramSocket'並在相同的套接字上進行通告和偵聽。在我的情況下,我有兩個'DatagramSocket'對象在同一臺機器上運行;其中一個是多播廣告客戶,另一個是偵聽多播數據的偵聽器。在這種特殊情況下,監聽器不會收到任何東西。 – dotNET
@ ElvisXia-MSFT:只需將上面的代碼複製並粘貼到空白的UWP應用程序中並運行即可。你會看到我正在談論的行爲。 – dotNET