问题描述
我正在使用UWP / Xamarin.Android应用程序,该应用程序使用SSDP组播搜索来检测本地网络上运行同一应用程序的其他设备。我已经能够通过UdpClient发送多播消息,但是我无法接收多播消息。它挂在UdpClient.ReveiveAsync()
上,从不接收消息。我们将不胜感激将其付诸实践。
这是我用来初始化UdpClient并接收消息的代码:
protected override Task CreateResourcesAsync()
{
address = IPAddress.Parse(Settings.Address ?? "239.255.255.250");
port = Settings.Port ?? 1900;
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any,port);
client = new UdpClient() { MulticastLoopback = true };
client.Client.SetSocketoption(SocketoptionLevel.socket,SocketoptionName.ReuseAddress,true);
// This line was to test setting SO_REUSE_MULTICASTPORT on Windows,it didn't help
//client.Client.SetSocketoption(SocketoptionLevel.socket,(SocketoptionName)0x3008,true);
client.Client.Bind(localEndPoint);
client.JoinMulticastGroup(address);
Task.Run(ReceiveThread);
return Task.CompletedTask;
}
async Task ReceiveThread()
{
while (IsActive && client != null)
{
// Does not receive any messages so the Task returned from client.ReceiveAsync() does not complete
UdpReceiveResult request = await client.ReceiveAsync();
}
}
除了SSDP以外,我尝试使用其他多播地址和端口,还尝试绑定到IPAddress.Any
和我的本地IP地址,但是都无效。
我可以使用WinRT DatagramSocket
接收多播消息,但是由于该应用需要在Android上运行,因此我无法继续使用WinRT。我会附上我的DatagramSocket
代码,以防万一它可以用来以某种方式提供帮助:
DatagramSocket socket = new DatagramSocket();
// If MulticastOnly is not true,it will bind to the port but won't receive messages
socket.Control.MulticastOnly = true;
socket.MessageReceived += async (sender,args) =>
{
// Immediately receives SSDP search requests from varIoUs devices on my network
};
await socket.BindServiceNameAsync("1900");
socket.JoinMulticastGroup("239.255.255.250");
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)