C#UDP通讯(数据接收)

发布于:2025-03-09 ⋅ 阅读:(11) ⋅ 点赞:(0)

    在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初始化时的异常,可以选择记录日志或忽略
        // 这里可以根据实际需求处理异常
    }
}

编码格式:发送端和接收端的编码格式必须一致,否则会出现乱码


网站公告

今日签到

点亮在社区的每一天
去签到