UDP 客户端未在 linux 机器上接收消息

ATT*_*ATT 6 c# udpclient asp.net-core .net-standard-2.0

我有一个程序来发现网络上的客户端,负责发现的类库是.net standard 2. 它在 Windows 机器上运行良好,但现在我需要在 linux 上运行它,而我的 UdpClient 没有收到消息,即使很困难,我确实看到它们从 linux 机器上的 tcpdump 客户端发送到正确的地址,这意味着他们确实得到了发现消息并回复它,它只是在代码中没有到达我的 UdpClient.Receive 方法。

        private bool Start(IPEndPoint localEP, IPEndPoint remoteEP)
        {
            try
            {
                MulticastOption mcastOption = new MulticastOption(remoteEP.Address, localEP.Address);
                List<byte> msg = new List<byte>();
                // message type: Discovery
                

                byte[] discoveryMessage = CreateDiscoveryMessage();


                UdpClient managerClient = new UdpClient(localEP);
                managerClient.Client.SetSocketOption(SocketOptionLevel.IP,
                                                SocketOptionName.AddMembership,
                                                mcastOption);
                managerClient.Client.SetSocketOption(SocketOptionLevel.IP,
                                           SocketOptionName.MulticastLoopback,
                                           0);



                Task.Run(() =>
                {
                    while (!_token.IsCancellationRequested)
                    {
                        IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0);

                        // Receive solicitation message
                        byte[] ret = managerClient.Receive(ref ep);
                        Console.WriteLine($"Message recieved from {ep.Address.ToString()}");
                    }
                });

                Task.Run(() =>
                {
                    while (!_token.IsCancellationRequested)
                    {
                        // Send discovery message
                        // Send discovery message_
                        managerClient.Send(discoveryMessage, discoveryMessage.Length, remoteEP);
                        Console.WriteLine("Message sent");
                        // wait 10 secs
                        Thread.Sleep(10000);
                    }
                });

                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
                return false;
            }
        }
Run Code Online (Sandbox Code Playgroud)