当前位置: 首页 > article >正文

C#UDP通讯(数据接收)

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

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


http://www.kler.cn/a/577456.html

相关文章:

  • OpenGL ES ->多重纹理贴图
  • Nginx(基础安装+配置文件)
  • RabbitMQ之旅(1)
  • 感受数字经济春潮涌动——中电联数字经济专委会理事长刘九如一行调研北京国信华源科技公司
  • Java EE 进阶:Spring MVC(2)
  • 数据库索引的作用:提升数据检索效率的关键
  • react基本功(二)
  • 视频图像刷新到HTTP的原理
  • Visual-RFT视觉强化微调:用「试错学习」教会AI看图说话
  • React基础之自定义hook函数
  • 阿里云操作系统(AliOS)
  • 一周热点-Claude 3.7 Sonnet-在响应和思考模型之间切换
  • 2025最新群智能优化算法:海市蜃楼搜索优化(Mirage Search Optimization, MSO)算法求解23个经典函数测试集,MATLAB
  • 《Python实战进阶》No15: 数据可视化:Matplotlib 与 Seaborn 的高级用法
  • 游戏引擎学习第145天
  • java2025年常见设计模式面试题
  • RK3568平台(camera篇)media_profiles_default.xml 解析
  • Ubuntu20.04搭建gerrit code review
  • C++第十节:map和set的介绍与使用
  • 图像清晰度评价函数设计