Использование UdpClient для отправки широковещательного пакета - C#
Формулировка задачи:
Приложение отправляет широковещательный пакет с помощью UdpClient.
Для этого инициализируется объект UdpClient, устанавливается порт и широковещательный адрес,
как показано в приведенном примере :
После этого приложение запускается и нажатием кнопки button1 вызываются посылки udpClient.Send()
широковещательных пакетов.
На клиентских машинах используется Wireshark анализатор принимаемых пакетов.
И здесь я вижу, что посылаемые пакеты вроде как не принимаются. Точнее - Wireshark показывает,
что реакция на посылки есть, но приходят будто бы только заголовки, а самих данных (Data) нет. (?)
Т.е. в файле Wireshark дает для этих посылок следующие строки :
No Time Source Destination Protocol Length Info
-------------------------------------------------------------------------------------
...................... Broadcast ARP 42 Who was 10.0.10.225? Tell 10.0.10.7
И для них развернуто :
[+]->Frame
[+]->Ethernet
[+]->Address Resolution Protocol
Но секции [+]->Data здесь нет. Только 42 байтные заголовки. Что это может значить?
Может быть Wireshark так и должен работать и просто не отображает в подобных случаях
часть с данными или действительно пакет не пришел правильно? Или ошибка в передающей части программы (см. приведенный код)?
Отладчик в передающей части программы после прохождения строки
int r = udpClient.Send(Data, Data.Length, BroadcastEndPoint);
показывает, что 20 байт данных переданы, функция завершена успешно.
................ using System.Net; using System.Net.Sockets; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private IPEndPoint BroadcastEndPoint; private UdpClient udpClient; private int Port; byte[] Data = new byte[20]; public Form1() { InitializeComponent(); Port = 9090; // 10.0.10.225 (0a.00.0a.e1) IPAddress Address = new IPAddress(0xe10a000a); BroadcastEndPoint = new IPEndPoint(Address, Port); udpClient = new UdpClient(Port); udpClient.EnableBroadcast = true; udpClient.Client.SendTimeout = 100; udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); } private void button1_Click(object sender, EventArgs e) { Data[0] = 0x07; Data[1] = 0x08; Data[2] = 0x09; Data[3] = 0x0a; Data[4] = 0x0b; Data[5] = 0x0c; Data[6] = 0x0d; Data[7] = 0x0e; Data[8] = 0x0f; Data[9] = 0x10; Data[10] = 0x11; Data[11] = 0x12; Data[12] = 0x13; Data[13] = 0x14; Data[14] = 0x15; Data[15] = 0x16; Data[16] = 0x17; Data[17] = 0x18; Data[18] = 0x19; Data[19] = 0x1A; try { int r = udpClient.Send(Data, Data.Length, BroadcastEndPoint); } catch (Exception ex) { string s = ex.Message; } } } }
Решение задачи: «Использование UdpClient для отправки широковещательного пакета»
textual
Листинг программы
BroadcastEndPoint = new IPEndPoint(IPAddress.Broadcast, Port);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д