Friday, May 22, 2009 8:05 AM Yonggang Meng

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.
Filed under: , , ,

Comments

# Use UdpClient to send and receive message - YongGang Meng's Weblog

Pingback from  Use UdpClient to send and receive message - YongGang Meng's Weblog

# Use UdpClient to send and receive message | rapid-DEV.net

Pingback from  Use UdpClient to send and receive message | rapid-DEV.net

# re: Use UdpClient to send and receive message

Wednesday, August 05, 2009 6:35 AM by Sumit

Work for me...Thanks....

# re: Use UdpClient to send and receive message

Thursday, December 30, 2010 4:29 PM by Quan

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!

# re: Use UdpClient to send and receive message

Thursday, August 25, 2011 2:44 AM by helpme

Que palabras... La frase fenomenal, brillante  

http://rsfiles.servehttp.com/  

knight

Leave a Comment

(required) 
(required) 
(optional)
(required)