Use UdpClient to send and receive message

Client to receive message sent by server:
 
   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.ComponentModel;
   4:  using System.Data;
   5:  using System.Drawing;
   6:  using System.Linq;
   7:  using System.Text;
   8:  using System.Windows.Forms;
   9:  using System.Net.Sockets;
  10:  using System.Threading;
  11:  using System.Net;
  12:   
  13:  namespace NoticeSystemClient
  14:  {
  15:      public partial class MainForm : Form
  16:      {
  17:          public delegate void ShowMessage(string message);
  18:          public ShowMessage myDelegate;
  19:          Int32 port = 11000;
  20:          UdpClient udpClient = new UdpClient(11000);
  21:          Thread thread;
  22:          public MainForm()
  23:          {
  24:              //CheckForIllegalCrossThreadCalls = false;
  25:              InitializeComponent();
  26:          }
  27:   
  28:          private void MainForm_KeyDown(object sender, KeyEventArgs e)
  29:          {
  30:              if (e.KeyCode == Keys.Escape)
  31:              {
  32:                  thread.Abort();
  33:                  udpClient.Close();
  34:                  Close();
  35:              }
  36:          }
  37:   
  38:          private void ReceiveMessage()
  39:          {                      
  40:              while (true)
  41:              {
  42:                  IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, port);
  43:                  byte[] content = udpClient.Receive(ref remoteIPEndPoint);
  44:   
  45:                  if (content.Length > 0)
  46:                  {
  47:                      string message = Encoding.ASCII.GetString(content);
  48:                      
  49:                      this.Invoke(myDelegate, new object[] { message });
  50:                  }
  51:              }
  52:          }
  53:   
  54:   
  55:          private void ShowMessageMethod(string message)
  56:          {
  57:              richText.Text = message;
  58:          }
  59:   
  60:          private void MainForm_Load(object sender, EventArgs e)
  61:          {            
  62:              myDelegate = new ShowMessage(ShowMessageMethod);
  63:              thread = new Thread(new ThreadStart(ReceiveMessage));
  64:              thread.IsBackground = true;
  65:              thread.Start();
  66:          }
  67:      }
  68:  }

Server:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.ComponentModel;
   4:  using System.Data;
   5:  using System.Drawing;
   6:  using System.Linq;
   7:  using System.Text;
   8:  using System.Windows.Forms;
   9:  using System.Net.Sockets;
  10:  using System.Net;
  11:   
  12:  namespace NoticeSystem
  13:  {
  14:      public partial class MainForm : Form
  15:      {
  16:          UdpClient udpClient = new UdpClient();
  17:          public MainForm()
  18:          {
  19:              InitializeComponent();
  20:          }
  21:   
  22:          private void btnClose_Click(object sender, EventArgs e)
  23:          {
  24:              udpClient.Close();
  25:              Close();
  26:          }
  27:   
  28:          private void btnSend_Click(object sender, EventArgs e)
  29:          {
  30:              Int32 port = 11000;
  31:              IPAddress ip = IPAddress.Parse(txtStartIP.Text.Trim());
  32:              IPEndPoint ipEndPoint = new IPEndPoint(ip,port);
  33:              byte[] content = Encoding.ASCII.GetBytes(richText.Text);
  34:              try
  35:              {
  36:                  int count = udpClient.Send(content, content.Length, ipEndPoint);
  37:                  if (count > 0)
  38:                  {
  39:                      MessageBox.Show("Message has been sent.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
  40:                  }
  41:              }
  42:              catch
  43:              {
  44:                  MessageBox.Show("Error occurs.", "Exclamation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  45:              }
  46:          }
  47:      }
  48:  }

There’s no more to say but the Client source code, red words.

We must indicate the port of the UdpClient, otherwise, it will pop errors.

code:

UdpClient udpClient = new UdpClient(11000);

At the outset, i don’t indicate the port, so when i debug the code, there’s nothing happen on client side.

Source code disassembled by Red Gate’s .Net Reflector of the UdpClient:

   1:  public UdpClient(int port) : this(port, AddressFamily.InterNetwork)
   2:  {
   3:  }

 

   1:  public UdpClient(int port, AddressFamily family)
   2:  {
   3:      IPEndPoint point;
   4:      this.m_Buffer = new byte[0x10000];
   5:      this.m_Family = AddressFamily.InterNetwork;
   6:      if (!ValidationHelper.ValidateTcpPort(port))
   7:      {
   8:          throw new ArgumentOutOfRangeException("port");
   9:      }
  10:      if ((family != AddressFamily.InterNetwork) && (family != AddressFamily.InterNetworkV6))
  11:      {
  12:          throw new ArgumentException(SR.GetString("net_protocol_invalid_family"), "family");
  13:      }
  14:      this.m_Family = family;
  15:      if (this.m_Family == AddressFamily.InterNetwork)
  16:      {
  17:          point = new IPEndPoint(IPAddress.Any, port);
  18:      }
  19:      else
  20:      {
  21:          point = new IPEndPoint(IPAddress.IPv6Any, port);
  22:      }
  23:      this.createClientSocket();
  24:      this.Client.Bind(point);
  25:  }
 
You will find that the UdpClient need a port to bind to to listen the IPENDPOINT.

7 Comments

  • Work for me...Thanks....

  • Hi Meng,

    I am using the UDP Client for my project. I have problem when the local network card got disconnected. My design requires me to keep on detecting the reconnection of the interface if disconnected. I attached my code as below:

    void ReConnect_Local_A()
    {
    while (true)
    {
    try
    {
    // Make new UDP Client object
    IPEndPoint ipLocalEndPointA = new IPEndPoint(IPAddress.Parse(localIPA), localPortNum);
    UDPClientA = new UdpClient(ipLocalEndPointA);

    // Otherwise successful
    ConnectionA_Flag = true;
    break;
    }

    catch (Exception e)
    {
    // Not sucecesful, close & reopen
    MessageBox.Show(e.ToString());
    UDPClientA.Close();
    UDPClientA = null; // to dispose UDPClient object
    System.Threading.Thread.Sleep(500);

    }
    }

    }
    It throughs exception of "The requested address is not valid on its context at the line of "UDPClientA = new UdpClient(ipLocalEndPointA);"

    Do you know why? Thanks for help!

  • Благодеяние приходить в наш игровой портал. Для нашем портале представлен громадный ассортимент лицензионных CD и DVD дисков: фильмов на DVD, компьютерных игр, в том числе и детских игр, а также лицензионные программы, музыка-MP3, аудиокниги. Беспричинно же вы можете приобрести у нас зрелище ради консолей: Playstation 3, Nintendo Wii, Xbox 360 и другие. В нашем магазине вы сможете найти компьютерные зрелище различных жанров: стратегии, симуляторы, логические игры, экшен, приключенческие зрелище, квесты, игры-ужасы и некоторый другие. Выше список cd дисков ежесекундно пополняется, и вы навсегда сможете найти у нас самые последние новинки, а беспричинно же игры, ставшие классикой. Мы отправляем CD и DVD почтой по всей России.
    Часть "Новинки компьютерных игр" пополняется еженедельно - у нас Вы сможете найти всегда последние игровые новники, выпущенные в России.Для наших постоянных покупателей действуют накопительные скидки.
    Приятных покупок!

  • Здравствуйте
    Возникла проблема,не могу писать посты на форуме, часто выдает
    ошибку FlashScript 458 Error
    Что это может быть ?

  • Как прогнать свой сайт? Как поднять посещаемость? Как поднять Тиц и Pr?
    Прогон по каталогам ничего не дает, мы предлогаем уникальную возможность прогона по дешевым ценам!
    СУПЕР ПРОГОН ВАШЕГО САЙТА: (icq 618204327)

    ТАРИФЫ:

    Регистрация в 5000 каталогах сайтов (350 руб)

    _______________________________________

    Тарифы прогона сайта по профилям:

    Регистрация 10000 профилей на разных сайтах ( с вашими сылками внутри аккаунтов) ВСЕГО 400 руб !!!!!
    Регистрация 200000 профилей на разных форумах ( с вашими сылками внутри аккаунтов) ВСЕГО 4800 руб !!!!!
    _______________________________________

    Тарифы прогона сайта по тарифу солянка:

    Размещение сообщения на 10000 сайтов Всего 350 руб
    Размещение сообщения на 600000 сайтов Всего 8000 руб
    ___________________________________________

    Наши тарифы прогона сайта по комментариям:

    Размещение комментариев на 3000 сайтов (Размещается комментарий на сайтах с вашим объявлением или сылкой на сайт) Всего 400 руб
    Размещение комментариев на 10000 сайтов (Размещается комментарий на сайтах с вашим объявлением или сылкой на сайт) Всего 1000 руб

    Для оформления заказа вам необходимо написать в Icq 618204327 для связи!
    Гарантия! Полный отчет!

    А также Скидки постоянным клиентам до 20%!!!! Много различных и комплексных тарифов!!!!

    06.04.13


  • До того, как обратиться в агентство недвижимости я читала множество отзывов. Отзывы о ЕГСН составили наиболее подробную картину работы агентства. Из этих отзывов я узнала, то, что интересовало меня. Оказалось, что Единая городская служба недвижимости занимается проведением ипотечных сделок от самого начального этапа до финала. Так как бегать по банкам у меня времени не было, меня это более чем устраивало. Мой риелтор - Юрий Юрьевич Кириенко меня привлекал только собственно к просмотру квартир и подписанию документов. Всеми остальными формальностями, как довнесение всяких справок в банк, вызов оценщика на квартиру, заказ ячейки и т.д. занимался сам. Вот за это и хочу сказать ему большое спасибо!

  • Продаю Редиректы:

    - Редиректы Short URL
    - Редиректы Mix
    - Редиректы Cwahi.net
    - Редиректы 0Webhost
    - Редиректы 0catch
    - Редиректы Dot.tk

    По всем вопросам пишите сразу в аську ICQ 231538

Comments have been disabled for this content.