Отправка сообщений по сети по UDP

Все исходники / Язык программирования C# / OS Windows / Desktop / Сетевые приложения / Отправка сообщений по сети по UDP
Оглавление:
  1. О протоколе UDP
  2. Суть исходника
  3. Листинг кода отправки сообщений
  4. Листинг кода приёма сообщений
  5. Файлы исходника для скачивания

О протоколе UDP

Интерфейс приложения отправки и приема сообщений протокол UDPИсходник программы отправки и приема сообщений по протоколу UDP. К сведению, протокол - это стандарт, правила отправки и получения сообщений. По сравнению с протоколом TCP UDP проще и быстрее. Протокол UDP не требует постоянного соединения, не отправляет вспомогательных сообщений и таким образом создает меньшую нагрузку на сеть. Но плата за эти достоинства - ненадежность доставки сообщений. И все-таки для многих целей использование UDP вполне оправдано. UDP можно использовать для однонаправленных передач, широкого вещания в сети, групповых рассылок, поиска родственных программ в сети.

Суть исходника

Исходник написан на языке программирования C#, первая часть исходника предназначена для ознакомления с высокоуровневым классом UdpClient, не отвлекаясь на другие детали. Для отправки и извлечения сообщений используются блокирующие методы. Небольшие размеры отправляемых сообщений лишь на короткое время блокируют программу. Для приема сообщений не обойтись без дополнительного потока, иначе блокирование приложения может продолжаться все время работы программы.

Листинг кода отправки сообщений


// --- ИСХОДНЫЙ КОД ОТПРАВКИ СООБЩЕНИЙ ---
// Отправка сообщения
void SendMessage()
{
   UdpClient udp = new UdpClient();

   // Указываем адрес отправки сообщения
   IPAddress ipaddress = IPAddress.Parse(textBoxAddress.Text);
   IPEndPoint ipendpoint = new IPEndPoint(ipaddress, 15000);

   // Формирование оправляемого сообщения и его отправка.
   // Сеть "понимает" только поток байтов и ей безразличны
   // объекты классов, строки и т.п. Поэтому преобразуем текстовое
   /// сообщение в поток байтов.
   byte[] message = Encoding.Default.GetBytes(textBoxSend.Text);
   int sent = udp.Send(message, message.Length, ipendpoint);

   // Если количество переданных байтов и предназначенных для 
   // отправки совпадают, то 99,9% вероятности, что они доберутся 
   // до адресата.
   If (sent == message.Length)
   {
      // все в порядке
      textBoxSend.Text = "";
   }
      

   // После окончания попытки отправки закрываем UDP соединение,
   // и освобождаем занятые объектом UdpClient ресурсы.
   udp.Close();
}

Листинг кода приёма сообщений


// --- ИСХОДНЫЙ КОД ИЗВЛЕЧЕНИЯ СООБЩЕНИЙ ---

// Запуск отдельного потока для приема сообщений
void StartReceive()
{
   rec = new Thread(new ThreadStart (Receive));
   rec.Start();
}

// Функция извлекающая пришедшие сообщения
// работающая в отдельном потоке.
void Receive()
{
   // При принудительном завершении работы метода 
   // класса UdpClient Receive() и непредвиденных ситуациях 
   // возможны исключения в этом месте исходного кода,
   // заключим его в блок try чтобы не появлялись окна ошибок.
   try
   {
      // Перед созданием нового объекта закрываем старый
      // для освобождения занятых ресурсов.
      if (udp != null) udp.Close();

      udp = new UdpClient(15000);
                  
      while (true)
      {

         IPEndPoint ipendpoint = null;
         byte[] message = udp.Receive(ref ipendpoint);
         textBox2.Text = Encoding.Default.GetString(message);

         // Если дана команда остановить поток, останавливаем бесконечный цикл.
         if (stopReceive == true) break;
      }  
                     
      udp.Close();
     }
     catch
     {
     }
}


// Функция безопасной остановки дополнительного потока
void StopReceive()
{
   // Останавливаем цикл в дополнительном потоке
   stopReceive = true;

   // Принудительно закрываем объект класса UdpClient 
   if (udp != null) udp.Close();

   // Для корректного завершения дополнительного потока
   // подключаем его к основному потоку.
   if (rec != null) rec.Join();
}

Файлы исходника для скачивания

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

Исходник создан в среде программирования MS Visual Studio 2012 .NET, Framework 4.0.

Скачать исходник

Тема: «Отправка сообщений по сети по UDP» Язык программирования C# udplocal1csharp_vs11.zip Размер:41 КбайтЗагрузки:5332