基于QT的UDP,RTL8211的千兆以太网图像采集上位机编程

本文介绍了一种使用Windows自带socket进行高速图像采集的方法,解决了QT自带QUDPsocket在Windows环境下兼容性和速率不足的问题。通过阻塞模式接收数据包,并在单独线程中运行,实现了稳定800M的数据传输且不丢包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,环境搭建

QT自带的QUDPsocket在windows的兼容不够,速率达不到要求,采用windows自带的socket采集实现高速图像采集。

二,接收方式

数据包的接收要用阻塞模式放在单独的线程while(1)里,才能保证数据不丢

 while(1)
    {
        net_pack_size = 0;

#if _QT_SOCKET_
        if( p_echo_socket->hasPendingDatagrams())  // 有数据
        {
            net_pack_size = p_echo_socket->pendingDatagramSize();
            p_echo_socket->readDatagram((char*)p_echo_net_pack,net_pack_size);
        }
#endif

#if _WIN_SOCKET_
        net_pack_size = recvfrom(echo_socket_WIN, (char*)p_echo_net_pack, 1600, 0, (sockaddr *)&src_addr_WIN, &src_addr_len);
#endif

#if _LINUX_SOCKET_
        net_pack_size = recvfrom(socket_descriptor,(char*)p_echo_net_pack,1600,0,(struct sockaddr *)&echo_socket_LINUX,(socklen_t*)&socket_len);
#endif

         MYmutex.lock();
      // camera_switch=(unsigned char)(p_echo_net_pack[0]);
      //  linecount=(unsigned char)(p_echo_net_pack[1])+( unsigned char)(p_echo_net_pack[2])*256;
         ringBuffer.append((const char*)(p_echo_net_pack),net_pack_size);
         MYmutex.unlock();

    }

效果:800M的稳定传输不丢包。

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值