Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Net.Sockets.UdpClient未接收多播消息_C#_Sockets_.net Core_Xamarin.android_Multicast - Fatal编程技术网

C# System.Net.Sockets.UdpClient未接收多播消息

C# System.Net.Sockets.UdpClient未接收多播消息,c#,sockets,.net-core,xamarin.android,multicast,C#,Sockets,.net Core,Xamarin.android,Multicast,我正在开发一个UWP/Xamarin.Android应用程序,它使用SSDP多播搜索来检测本地网络上运行相同应用程序的其他设备。我已经能够使用UdpClient发送多播消息,但无法接收多播消息。它挂起在UdpClient.ReveiveAsync()上,并且从不接收消息。我们将非常感谢您的帮助 下面是我用来初始化UdpClient和接收消息的代码: protectedoverride任务CreateResourcesAsync() { address=IPAddress.Parse(Settin

我正在开发一个UWP/Xamarin.Android应用程序,它使用SSDP多播搜索来检测本地网络上运行相同应用程序的其他设备。我已经能够使用UdpClient发送多播消息,但无法接收多播消息。它挂起在UdpClient.ReveiveAsync()上,并且从不接收消息。我们将非常感谢您的帮助

下面是我用来初始化UdpClient和接收消息的代码:

protectedoverride任务CreateResourcesAsync()
{
address=IPAddress.Parse(Settings.address???“239.255.255.250”);
端口=设置。端口??1900;
IPEndPoint localEndPoint=新IPEndPoint(IPAddress.Any,端口);
client=newudpclient(){MulticastLoopback=true};
client.client.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);
//这一行是为了测试设置,所以在Windows上重新使用多播端口,它没有帮助
//client.client.SetSocketOption(SocketOptionLevel.Socket,(SocketOptionName)0x3008,true);
client.client.Bind(localEndPoint);
客户。JoinMulticastGroup(地址);
运行(接收线程);
返回Task.CompletedTask;
}
异步任务ReceiveThread()
{
while(IsActive&&client!=null)
{
//未收到任何消息,因此从client.ReceiveAsync()返回的任务未完成
UdpReceiveResult请求=等待客户端。ReceiveAsync();
}
}
我尝试过使用不同的多播地址和端口而不是SSDP,我也尝试过绑定到
IPAddress.Any
和我的本地IP地址,但两者都不起作用

我可以使用WinRT
DatagramSocket
接收多播消息,但我不能继续使用WinRT,因为应用程序需要在Android上运行。我将包括我的
DatagramSocket
代码,以防它可以用于帮助:

DatagramSocket socket=newdatagramsocket();
//如果Multicastly不为true,它将绑定到端口,但不会接收消息
socket.Control.multicastly=true;
socket.MessageReceived+=异步(发送方,参数)=>
{
//立即从我的网络上的各种设备接收SSDP搜索请求
};
等待socket.BindServiceNameAsync(“1900”);
socket.JoinMulticastGroup(“239.255.255.250”);

从理论上讲,多播是个好主意。实际上,有太多的事情会出错……老实说,在过去的4年里,我在WinRT API中使用它,这对我个人来说是相当可靠的。我只是希望我能弄明白如何在.NET中工作。lolHi,你做得好吗?对我来说,它可以在Nexus5上工作,但不能在Pixel3上工作。从理论上讲,多播是个好主意。实际上,有太多的事情会出错……老实说,在过去的4年里,我在WinRT API中使用它,这对我个人来说是相当可靠的。我只是希望我能弄明白如何在.NET中工作。lolHi,你做得好吗?对我来说,它适用于Nexus5,但不适用于像素3。