[导入]包装后的UDP通讯组件

本文介绍了一个用于简化UDP通讯操作的C#组件。该组件提供发送和接收UDP消息的功能,并允许用户通过事件处理接收到的数据。文章详细展示了如何使用这个组件进行网络通讯。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 


using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Diagnostics;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace com.xaccp.Control.UdpControl
{
 /// <summary>
 /// UDP消息到达委托。
 /// 处理方法为void(byte[])。
 /// </summary>
 public delegate void UDPMsgHandler(byte[] receivebytes);
 /// <summary>
 /// 包装后的UDP通讯组件
 /// 作者:周鼎汉
 /// 时间:2007.03.20
 /// </summary>
 public class UDP
 {
  int port;
  /// <summary>
  /// 消息到达事件
  /// </summary>
  public  event UDPMsgHandler MsgArrivedEvent;

  /// <summary>
  /// 目的地端口(从1025开始,默认为10000)
  /// </summary>
  public int Port
  {
   get{return port;}
   set{port =value;}
  }
  /// <summary>
  /// 构造UDP组件对象(无参数)
  /// </summary>
  public UDP()
  {
    this.port=10000;
  }
  /// <summary>
  /// 构造UDP组件对象(有参数)
  /// </summary>
  /// <param name="port">目的地端口(从1025开始,默认为10000)</param>
  public UDP(int port)
  {
   this.port=port;
  }
  /// <summary>
  /// 发送Tcp消息
  /// <code>obj.Send("192.168.0.100",bytes);<br></br></code>
  /// <code>obj.Send("myserver",bytes);<br></br></code>
  /// <code>obj.Send("abc.com",bytes);<br></br></code>
  /// </summary>
  /// <param name="range">发送的目的地,IP地址,或者主机名称。
  /// </param>
  /// <param name="datagram">发送的内容</param>
  public  void Send(string range, byte[] datagram)
  {
   this.Send(range,this.port,datagram);
  }

  /// <summary>
  /// 发送Tcp消息
  /// <code>obj.Send("192.168.0.100",bytes);<br></br></code>
  /// <code>obj.Send("myserver",bytes);<br></br></code>
  /// <code>obj.Send("abc.com",bytes);<br></br></code>
  /// </summary>
  /// <param name="range">发送的目的地,IP地址,或者主机名称。
  /// </param>
  /// <param name="port">目的地端口(从1025开始,默认为10000)
  /// </param>
  /// <param name="datagram">发送的内容</param>
  
  public  void Send(string range,int port, byte[] datagram)
  {
   //建立UdpClient客户端,准备发送,使用无参的构造方法
   UdpClient sender = new UdpClient();
   //建立发送目的地的IPEndPoint
   string ipaddress=Dns.GetHostByName(range).AddressList.GetValue(0).ToString();
   IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(ipaddress),port);
   try
   {
    //发送数据到目的地IPEndPoint
    sender.Send(datagram,datagram.Length,endPoint);
   }
   catch (Exception ex)
   {
    Console.WriteLine(ex.Message);
    return;
   }
   finally
   {
    sender.Close();
   }
  }

  /// <summary>
  /// 接收数据的方法,一般在线程中执行。
  /// <code>
  /// UDP udp=new UDP();
  /// Thread t=new Thread(new ThreadStart(udp.Receiver));
  /// t.IsBackground=true;
  /// t.Start();
  /// </code>
  /// </summary>
  public  void Receiver()
  {
   //准备接收的UdpClient,在固定的端口监听(port)
   UdpClient receiveUdpClient = new UdpClient(port);
   //从远程主机那里接收数据,未接收以前是不知道的。
   IPEndPoint RemoteIPEndPoint = null;
   try
   {
    //持续不断的接收
    while (true)
    {
     //接收数据,如果没有数据过了,则此方法阻塞。
     byte[] receiveBytes = receiveUdpClient.Receive(ref RemoteIPEndPoint);
     //一旦接收到了数据,那么调用激活事件的方法激活数据到达事件
     if(MsgArrivedEvent!=null)
     {
      MsgArrivedEvent(receiveBytes);
     }
    }
   }
   catch (Exception ex)
   {
    Console.WriteLine(ex.Message);
    return;
   }
  }
 }
}


文章来源: http://blog.sina.com.cn/s/blog_49458c27010008nx.html

转载于:https://www.cnblogs.com/dalishuishou/archive/2008/05/01/1178419.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值