UDP: чтение данных со всех сетевых интерфейсов

ve следующий код для чтения многоадресного сообщения, поступающего из сети, для указанного IP + PortI '

private static void ReceiveMessages(int port, string ip, CancellationToken token)
{
    Task.Factory.StartNew(() =>
        {
            using (var mUdpClientReceiver = new UdpClient())
            {
                var mReceivingEndPoint = new IPEndPoint(IPAddress.Any, port);
                mUdpClientReceiver.ExclusiveAddressUse = false;
                mUdpClientReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                mUdpClientReceiver.ExclusiveAddressUse = false;
                mUdpClientReceiver.Client.Bind(mReceivingEndPoint);
                mUdpClientReceiver.JoinMulticastGroup(IPAddress.Parse(ip), 255);

                while (!token.IsCancellationRequested)
                {
                    byte[] receive = mUdpClientReceiver.Receive(ref mReceivingEndPoint);

                    Console.WriteLine("Message received from {0} ",mReceivingEndPoint);
                }
            }
        });
}

у меня два сетевых адаптераДанные поступают на этот многоадресный порт ip + (подтверждается двумя случаями мониторинга Wireshark для каждого сетевого адаптера). Я вижу на wireshark много трафика, приходящего на эти порты + Ip) для обеих сетевых карт.

Проблема в том, что на моей консоли я вижу только сообщения, приходящие с одной сетевой карты.

Я дважды проверил с netstat, я нена моем порте не должно быть никаких других программ:

Так почему я получаю трафик только от одной из двух моих сетевых карт?

РЕДАКТИРОВАТЬ:

Я даже попробовал следующее:

private static void ReceiveMessages(int port, string ip, CancellationToken token, IEnumerable ipAddresses)
{
    foreach (IPAddress ipAddress in ipAddresses)
    {
        IPAddress ipToUse = ipAddress;
        Task.Factory.StartNew(() =>
        {
            using (var mUdpClientReceiver = new UdpClient())
            {

                var mReceivingEndPoint = new IPEndPoint(ipToUse, port);
                mUdpClientReceiver.ExclusiveAddressUse = false;
                mUdpClientReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                mUdpClientReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
                mUdpClientReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontRoute, 1);
                mUdpClientReceiver.ExclusiveAddressUse = false;
                mUdpClientReceiver.Client.Bind(mReceivingEndPoint);
                mUdpClientReceiver.JoinMulticastGroup(IPAddress.Parse(ip), 255);
                Console.WriteLine("Starting to listen on "+ipToUse);
                while (!token.IsCancellationRequested)
                {
                    byte[] receive = mUdpClientReceiver.Receive(ref mReceivingEndPoint);

                    Console.WriteLine("Message received from {0} on {1}",  mReceivingEndPoint,ipToUse);
                }
            }
        });
    }
}

Я вижуНачинаем слушать на «правильном IP» дважды (для двух моих IP-адресов), но он по-прежнему отображает только данные, поступающие с одной сетевой карты.

РЕДАКТИРОВАТЬ 2

Я заметил еще кое-что странное. Если я отключаю интерфейс, на котором я получаю все данные, а затем запускаю программное обеспечение, я теперь получаю данные из другого интерфейса. Если я снова активирую интерфейс и перезапущу программное обеспечение, я по-прежнему получаю трафик на неактивированной карте.

И я точно знаю, что яVE устройства, которые отвечают мне, которые подключены только к одной сети (не оба)

РЕДАКТИРОВАТЬ 3

Другое дело: если я отправляю сообщение от себя (localhost), на все сетевые карты, которые яЯ вижу, что они появляются на моих двух сетевых интерфейсах. НО, если я запускаю свою программу дважды, сообщения получает только первая программа, а не вторая.

Редактировать 4

Дополнительная информация после первого комментария: I 'две карты Ethernet, одна с10.10.24.78 IP, другой с10.9.10.234 ф. Это'не я посылаю данные, а куски сети (порт5353 с этим ip является известным многоадресным адресом, используемым для mDNS, поэтому я должен получать трафик от таких вещей, как принтер, itunes, macs и некоторые другие части программного обеспечения, которые мы создали). Данные многоадресные на ip224.0.0.251 и порт.5353

Вот код, который можно использовать для отправки данных по нескольким IP-адресам, но, как я уже описал, если вы запускаете его на локальном компьютере, он почти работает (за исключением того, что только один локальный клиент получает сообщение).

private static void SendManuallyOnAllCards(int port, string multicastAddress, IEnumerable ipAddresses)
{
    foreach (IPAddress remoteAddress in ipAddresses)
    {
        IPAddress ipToUse = remoteAddress;
        using (var mSendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
        {
            mSendSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership,
                                        new MulticastOption(IPAddress.Parse(multicastAddress)));
            mSendSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 255);
            mSendSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

            var ipep = new IPEndPoint(ipToUse, port);
            //IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(multicastAddress), port);
            mSendSocket.Bind(ipep);
            mSendSocket.Connect(ipep);


            byte[] bytes = Encoding.ASCII.GetBytes("This is my welcome message");
            mSendSocket.Send(bytes, bytes.Length, SocketFlags.None);
        }
    }
}

РЕДАКТИРОВАТЬ 5 Вот результат моегоroute print(Didn»не знаю этой команды), и на моих двух IP-адресах я всегда получаю данные о10.9.10.234 

Редактировать 6

Я пробовал несколько других вещей:

Используйте сокет для получения вместо UdpClient -> Didn»т работалУстановить дополнительное считывание socketOption для считывателя (DontRoute = 1, Broadcast = 1) ->Didn»т работалУкажите MulticastInterface, который должен использовать Socket ридер (используя socketOption MulticastInterface) -> Didn»т работа

Ответы на вопрос(3)

Ваш ответ на вопрос