Использование 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);