[导入]包装后的UDP通讯组件
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
浙公网安备 33010602011771号