2015-11-04 1 views
1

Недавно я изменил свою программу, которая раньше использовала TCP/IP для многоадресной рассылки UDP, благодаря чему использовалось намного меньше ресурсов.UDP Многоадресная рассылка с несколькими сетями в C#

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

Могу ли я выбрать, какое соединение с многоадресной рассылкой находится на уровне программы? Я попытался изменить различные настройки в системе, например, сетевые приоритеты, но ничего не получилось.

Для мультикастинга я использую:

UdpClient publisher = new UdpClient(IP, Port); 
publisher.Send(data, data.Length); 

Где IP является одним из многоадресного диапазона (в основном 230.X.X.X).

В случае TCP/IP, который был раньше, я мог бы указать EntryPoint на IP-адресе для определенной сетевой карты, но здесь, похоже, это невозможно, потому что мне нужно отправлять пакеты по многоадресному адресу, а не на моей машине.

Благодарим за любую помощь заранее.

+1

Использовать EndPoint: IPAddress ip = IPAddress.Parse ("192.168.1.28"); IPEndPoint ep = новый IPEndPoint (ip, порт); UdpClient publisher = новый UdpClient (ep); Затем привяжите, как показано на следующей веб-странице: https://msdn.microsoft.com/en-us/library/ekd1t784(v=vs.110).aspx – jdweng

ответ

1

При использовании многоадресной передачи по-прежнему необходимо позвонить Bind. Другими словами, слушатель выбирает, какие NIC (ы) они слушают. Когда вы отправляете сообщение, стек локальной сети будет решать, какие сетевые адаптеры ему нужно выходить автоматически. Этот класс UdpClient вызывает Bind с данными, переданными в конструкторе. Это должна быть ваша конечная точка приема. См. Здесь: https://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient(v=vs.110).aspx. Затем, отправляя данные, используйте метод Send, который принимает параметр конечной точки. Пропустите целевой адрес.