下面是详细讲解“C#使用udp如何实现消息的接收和发送”的攻略,希望对您有所帮助。
UDP协议简介
UDP(User Datagram Protocol,用户数据报协议)是一种面向无连接的传输协议,能够在局域网和广域网的IP网络中实现高效的数据传输。它在传输数据时不提供可靠性和完整性的保证,但是却具有速度快、延迟低等优点,因此在实时性较高的应用场景中被广泛使用,如音视频传输、实时游戏等。
消息的发送
引入命名空间
使用UDP协议发送消息,需要使用System.Net.Sockets命名空间下的UdpClient类。因此,需要先在代码文件开头添加引用。
using System.Net.Sockets;
创建UDP连接
使用UdpClient创建UDP连接,并指定对方IP地址和端口号。如果希望发送广播消息,可以将IP地址设置为“255.255.255.255”。
UdpClient udpClient = new UdpClient();
IPEndPoint ipEndPoint= new IPEndPoint(IPAddress.Parse("192.168.1.100"), 8001); // 发送给指定的IP和端口
//IPEndPoint ipEndPoint= new IPEndPoint(IPAddress.Broadcast, 8001); // 发送广播消息
构造UDP数据包
使用Encoding对象将消息转换成字节数组,然后将字节数组封装进一个UdpClient标准数据包中。
string message = "Hello World!";
byte[] sendBytes = Encoding.UTF8.GetBytes(message);
UdpClient udpClient = new UdpClient();
IPEndPoint ipEndPoint= new IPEndPoint(IPAddress.Parse("192.168.1.100"), 8001);
udpClient.Send(sendBytes, sendBytes.Length, ipEndPoint);
消息的接收
引入命名空间
使用UDP协议接收消息,同样需要使用System.Net.Sockets命名空间下的UdpClient类。因此,需要先在代码文件开头添加引用。
using System.Net.Sockets;
创建UDP连接
使用UdpClient创建UDP连接,并指定监听的本地IP地址和端口号。
UdpClient udpClient = new UdpClient(8001); //监听本地端口8001
接收消息
使用UdpClient的Receive方法从网络接收消息,该方法会一直阻塞等待,直到接收到消息。
byte[] receiveBytes = udpClient.Receive(ref ipEndPoint);
string message = Encoding.UTF8.GetString(receiveBytes, 0, receiveBytes.Length);
示例说明
示例1:UDP发送和接收消息
下面来看具体的代码,使用UDP协议发送一条消息“Hello World!”到指定的IP地址和端口,接收端收到消息后回复一条消息“Nice to meet you!”,发送端收到回复后打印出来。
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main(string[] args)
{
// 发送端
UdpClient udpClient = new UdpClient();
IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.100"), 8001);
string message = "Hello World!";
byte[] sendBytes = Encoding.UTF8.GetBytes(message);
udpClient.Send(sendBytes, sendBytes.Length, remoteIpEndPoint);
// 接收端
UdpClient listener = new UdpClient(8001);
IPEndPoint localIpEndPoint = new IPEndPoint(IPAddress.Any, 8001);
byte[] receiveBytes = listener.Receive(ref localIpEndPoint);
string receiveMessage = Encoding.UTF8.GetString(receiveBytes, 0, receiveBytes.Length);
Console.WriteLine($"接收到消息:{receiveMessage}");
// 发送回复
string reply = "Nice to meet you!";
byte[] replyBytes = Encoding.UTF8.GetBytes(reply);
udpClient.Send(replyBytes, replyBytes.Length, remoteIpEndPoint);
// 接收回复
receiveBytes = listener.Receive(ref localIpEndPoint);
receiveMessage = Encoding.UTF8.GetString(receiveBytes, 0, receiveBytes.Length);
Console.WriteLine($"接收到回复:{receiveMessage}");
}
}
运行结果如下:
接收到消息:Hello World!
接收到回复:Nice to meet you!
示例2:使用Task异步接收消息
上面的示例中接收消息的代码是同步的,会阻塞主线程。在实际应用中,可能需要使用异步方式接收消息,以免阻塞主线程。下面来看一个使用Task异步接收UDP消息的示例。
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
UdpClient listener = new UdpClient(8001);
IPEndPoint localIpEndPoint = new IPEndPoint(IPAddress.Any, 8001);
while (true)
{
UdpReceiveResult receiveResult = await listener.ReceiveAsync();
string receiveMessage = Encoding.UTF8.GetString(receiveResult.Buffer, 0, receiveResult.Buffer.Length);
Console.WriteLine($"接收到消息:{receiveMessage},来自:{receiveResult.RemoteEndPoint}");
}
}
}
运行该程序后,可以在其他终端上使用UDP协议向本机发送消息,程序会非阻塞地接收并打印出消息内容和发送方的地址信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用udp如何实现消息的接收和发送 - Python技术站