C#中的udp通讯关键类:Udpclient,它位于命名空间System.Net.Sockets中,发送接收都是UdpClient类,html
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; } } }
一、在Winfrom框架下,在多线程中进行控件操做,就须要使用异常委托方式解决。调试
二、使用同一台计算机进行调试,ip设置统一,即为:127.0.0.1,端口号不一样。code
该文章简单对C#的UDP通信进行一个讲解,简单入门能够,还有不少须要注意,好比须要加锁保护数据,使用队列等等方式对数据进行。再之后的文章中再补充。orm