Использование UdpClient для отправки широковещательного пакета - C#

Узнай цену своей работы

Формулировка задачи:

Приложение отправляет широковещательный пакет с помощью UdpClient. Для этого инициализируется объект UdpClient, устанавливается порт и широковещательный адрес, как показано в приведенном примере :
................
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;
            }
        }
    }
}
После этого приложение запускается и нажатием кнопки 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 байт данных переданы, функция завершена успешно.

Решение задачи: «Использование UdpClient для отправки широковещательного пакета»

textual
Листинг программы
BroadcastEndPoint = new IPEndPoint(IPAddress.Broadcast, Port);

ИИ поможет Вам:


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

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы