在写具体的用c#实现UDP通讯的方式之前,我们要先搞清楚相关的概念,那就是什么是UDP协议。
UDP和TCP一样,是同属于TCP/IP协议簇的传输层协议:
这里一定要注意TCP/IP是指一堆协议的集合,而这些集合之中又属TCP协议和IP协议比较重要,所以就将此协议集合以TCP/IP的方式进行命名。
那么UDP协议和TCP协议有什么区别呢?
TCP协议是面向连接的协议,A端到B端要传输数据则需要进行三次握手建立连接,之后便是点对点的数据通讯,对于数据来说是可靠的。
而UDP协议是一种非连接的协议,在传输数据之前并没有什么三次握手建立连接的概念,它什么时候想发送数据就什么时候发送数据,什么时候想停止发送就什么时候停止发送。根本不管有没有接收端,这样做的结果便是其即时性很高,对比TCP能够大大减少数据延迟,多用于同步通信。但缺点是容易丢失数据,且不能保证数据的时序性。
好了,弄清楚了UDP协议的概念,那么我们下面便来说说如何在C#语言之中实现UDP的通信。
要实现UDP通信,我们需要使用UdpClient类。
创建监听的核心代码:
UdpClient udpserver;
private void udpListen()
{
udpserver = new UdpClient(8888);//参数为要进行UDP监听的端口
}
接收数据的核心代码:
private void getMsg()//开启一个异步线程去执行该方法
{
//定义一个IPEndPoint对象用来装载数据来源的IP和端口信息
IPEndPoint remoteIpAndPort = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
//等待消息,注意,使用该方法在等待消息时会阻塞线程
byte[] msgBytes = udpserver.Receive(ref remoteIpAndPort)
string receivedStr = System.Text.Encoding.UTF8.GetString(msgBytes);
}
}
发送数据的核心代码:
private void buttonSend_Click(object sender, EventArgs e)
{
//将要发送的数据转化成byte数组
byte[] b = System.Text.Encoding.UTF8.GetBytes("Hello");
//创建目标IP端口信息
IPEndPoint sendTo = new IPEndPoint(IPAddress.Parse("192.168.1.233"),1234);
//发送数据
this.udpserver.Send(b, b.Length, sendTo);
}
另外放一个小demo的链接,有需要的拿去:c#UDP通讯demo