System.Net.Sockets.UdpClient没有收到多播消息

问题描述

我正在使用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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...