在C#中,UDP(用户数据报协议)是一种无连接的传输协议,适用于对实时性要求较高的应用场景。
1.UDP数据接收的基本流程如下:
创建一个UdpClient
对象,绑定到指定的端口。
使用一个独立的线程来接收数据,以避免阻塞主线程(尤其是UI线程)。
在接收线程中,循环接收数据并处理。
2.主线程中的UDP客户端初始化
try
{
// 创建一个UdpClient对象,绑定到任意IP地址和端口0(系统会自动分配一个可用端口)
UdpClient client = new UdpClient(new IPEndPoint(IPAddress.Any, 0));
// 定义远程终结点,IPAddress.Broadcast表示广播地址,udpPort为指定的端口号
IPEndPoint endpoint = new IPEndPoint(IPAddress.Broadcast, udpPort);
// 创建一个线程来接收UDP消息,避免阻塞UI线程
Thread thread = new Thread(receiveUdpMsg);
thread.IsBackground = true; // 设置为后台线程,主线程退出时自动结束
thread.Start(); // 启动线程
}
catch (Exception ex)
{
// 捕获异常并显示错误信息
MessageBox.Show(ex.Message, "中控");
}
3.接收数据的线程方法
void receiveUdpMsg()
{
try
{
// 创建一个UdpClient对象,绑定到指定的端口udpPort
UdpClient client = new UdpClient(new IPEndPoint(IPAddress.Any, udpPort));
// 定义远程终结点,IPAddress.Any表示接收来自任意IP地址的数据
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0);
// 初始化接收数据的字符串
string receivedata = string.Empty;
// 循环接收数据
while (true)
{
try
{
// 接收数据,bytRecv为接收到的字节数组
byte[] bytRecv = client.Receive(ref endpoint);
// 将字节数组转换为字符串,使用gb2312编码
string message = Encoding.GetEncoding("gb2312").GetString(bytRecv, 0, bytRecv.Length);
// 在这里处理接收到的数据,例如输出显示
// receivedata = message; // 可以将接收到的数据赋值给receivedata
// Console.WriteLine(message); // 或者直接输出到控制台
}
catch (Exception ex)
{
// 捕获接收数据时的异常,可以选择记录日志或忽略
// MessageBox.Show(ex.Message, "receiveUdpMsg_try");
}
}
}
catch (Exception ex)
{
// 捕获UdpClient初始化时的异常,可以选择记录日志或忽略
// 这里可以根据实际需求处理异常
}
}
编码格式:发送端和接收端的编码格式必须一致,否则会出现乱码