C# UDPClient多播接收在具有多个NIC的计算机上失败

C# UDPClient多播接收在具有多个NIC的计算机上失败,c#,multicast,udpclient,C#,Multicast,Udpclient,我有一台带有多个NIC的计算机,UDPClient的发送方法不断失败。代码如下: private static void receiveData() { recvSock = new UdpClient(PORT); //recvSock.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, mainInterface);

我有一台带有多个NIC的计算机,UDPClient的发送方法不断失败。代码如下:

        private static void receiveData()
    {
        recvSock = new UdpClient(PORT);
        //recvSock.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, mainInterface);
        recvSock.JoinMulticastGroup(IPAddress.Parse(IP), 50);

        IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);

        while (true)
        {
            byte[] data = recvSock.Receive(ref iep);

            // Do not include messages from us
            if (myIPs.Contains(iep.Address))
                continue;

            string stringData = Encoding.ASCII.GetString(data, 0, data.Length);
            Console.WriteLine("received: " + stringData);

        }
    }
端口=5000,IP=224.5.6.7,这样就可以了。主要问题是我无法通过recvSock.Receive()行。我看到数据包通过wireshark传入-但代码无法处理它们

想法?提前谢谢


编辑:我可以确认是多个NIC导致了问题——代码在单个NIC上工作正常。取消对SetSocketOption行的注释应该允许它与多个NIC一起工作,但它仍然失败。。。。想法?

接口部分是以下代码中的重要部分:

unsigned long interface;
ip_mreq mreq;

_parseHostname( _description->getInterface(), interface );
mreq.imr_multiaddr.s_addr = _writeAddress.sin_addr.s_addr;
mreq.imr_interface.s_addr = interface;

setsockopt( _readFD, IPPROTO_IP, IP_ADD_MEMBERSHIP,
                (char*)&mreq, sizeof( mreq ));

接口是接收网卡的(单播)IP地址。

我在这篇文章中发现了同样的问题,然后在以下位置找到了解决方案:


基本上Bind()到0.0.0.0不起作用,您必须在每个本地ip地址上绑定()和JoinMulticastGroup()。这一次,我一定会爱上微软的

需要明确的是,此“客户端”应用程序[机器]具有多个NIC,或者您连接到的服务器具有多个NIC??由于我有相同的问题,我愿意确认:“客户端应用程序[机器]具有多个NIC”。通常,客户机关心的是位于多个NIC网络中的任何一个网络上的服务器。只有当客户端可以通过多个客户端NIC看到同一台服务器时,具有多个NIC的服务器才重要。@Dan找到解决方法了吗?我也有同样的问题,这个答案可能有用。但是,由于它使用的术语与原始问题完全不同,…,谁知道呢?这个答案与给定问题的唯一关联是,它们都包含“IP”一词