简介
C#中的udp通信关键类:Udpclient,它位于命名空间System.Net.Sockets中,发送接收都是UdpClient类,
命名空间
using System.Net.Sockets;
using System.Net;
using System.Net.NetworkInformation;
using System.Management;
发送数据
1.Visual C# UdpClient类发送UDP数据包:
在具体使用中,一般分成二种情况:
(1).知道远程计算机IP地址:
"Send"方法的调用语法如下:
参数说明:
dgram 要发送的 UDP 数据文报(以字节数组表示)。
bytes 数据文报中的字节数。
endPoint 一个 IPEndPoint,它表示要将数据文报发送到的主机和端口。
返回值 已发送的字节数。
下面使用UdpClient发送UDP数据包的具体的调用例子:
(2).知道远程计算机名称:
知道远程计算机名称后,利用"Send"方法直接把UDP数据包发送到远程主机的指定端口号上了,这种调用方式也是最容易的,语法如下:
参数说明:
dgram 要发送的 UDP 数据文报(以字节数组表示)。
bytes 数据文报中的字节数。
hostname 要连接到的远程主机的名称。
port 要与其通讯的远程端口号。
返回值 已发送的字节数。
附上发送数据代码如下:
private void btnSend_Click(object sender, EventArgs e)
{
Thread t = new Thread(SendMsg);
t.IsBackground = true;
t.Start(sendText.Text);
}
private void SendMsg( object obj )
{
string message = (string)obj;
SendClient = new UdpClient(0);
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(message);
remoteIp = IPAddress.Parse(remoteIPBox.Text);
IPEndPoint iep = new IPEndPoint(remoteIp,portSend);
try
{
SendClient.Send(bytes, bytes.Length, iep);
AddItem(listBoxstatus, string.Format("向{0}发送:{1}", iep, message)); //异步委托显示数据
clearTextBox();
}
catch(Exception ex)
{
AddItem(listBoxstatus,"发送出错"+ex.Message);
}
}
接收数据
2.Visual C# UdpClient类接收UDP数据包:
接收UDP数据包使用的是UdpClient中的“Receive"方法。
参数说明:
remoteEP 是一个 IPEndPoint类的实例,它表示网络中发送此数据包的节点。
附上接收数据的代码如下:
private void FormChat_Load(object sender, EventArgs e)
{
//创建接收线程
Thread RecivceThread = new Thread(RecivceMsg);
RecivceThread.IsBackground = true;
RecivceThread.Start();
sendText.Focus();
}
private void RecivceMsg()
{
IPEndPoint local = new IPEndPoint(ip,portRecv);
RecviceClient = new UdpClient(local);
IPEndPoint remote = new IPEndPoint(IPAddress.Any, portSend);
while (true)
{
try
{
byte[] recivcedata = RecviceClient.Receive(ref remote);
string strMsg = Encoding.ASCII.GetString(recivcedata, 0, recivcedata.Length);
AddItem(listBoxRecv, string.Format("来自{0}:{1}", remote, strMsg));
}
catch
{
break;
}
}
}
细节注意
1、在Winfrom框架下,在多线程中进行控件操作,就需要使用异常委托方式解决。
2、使用同一台计算机进行调试,ip设置统一,即为:127.0.0.1,端口号不同。
总结
该文章简单对C#的UDP通讯进行一个讲解,简单入门可以,还有很多需要注意,比如需要加锁保护数据,使用队列等等方式对数据进行。再以后的文章中再补充。