Отправить широковещательное сообщение со всех сетевых адаптеров - PullRequest
8 голосов
/ 12 января 2009

У меня есть приложение, которое отправляет широковещательные сообщения и прослушивает ответные пакеты. Ниже приведен фрагмент кода.

m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);

m_socket.Bind(new IPEndPoint(IPAddress.Any, 2000));

m_socket.BeginSendTo(
                    buffer, 
                    0, 
                    buffer.Length, 
                    SocketFlags.None,
                    new IPEndPoint(IPAddress.Broadcast, 2000),
                    Callback), 
                    null
                    );

При запуске приложения широковещательное сообщение не отправлялось. На моей машине у меня есть три сетевых адаптера. Один - это мой локальный сетевой адаптер, а два других - это виртуальные сетевые адаптеры VMWare. Когда я запускаю свое приложение, я вижу (используя захват сети Wireshark), что широковещательное сообщение отправляется от одного из сетевых адаптеров VMWare.

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

Ответы [ 4 ]

13 голосов
/ 12 января 2009

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

foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
    foreach (var ua in i.GetIPProperties().UnicastAddresses)
        Console.WriteLine(ua.Address);
6 голосов
/ 12 января 2009

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

1 голос
/ 05 апреля 2012

Проверьте это http://salaam.codeplex.com/ Я и мой друг разработали библиотеку классов под названием Салам. загрузите исходный код или используйте двоичные файлы (.dll) для его использования.

0 голосов
/ 12 сентября 2010

Вы можете использовать IPAddress.Any при создании tcpListener. Это свяжет слушателя tcp со всеми интерфейсами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...