关于QT UDP组播的两个问题

qt udp & 组播 & 多网卡 一、前言 以下代码实现了udp组播的接收和发送数据的功能。但是,在多网卡环境下仍然存在部分问题,但也解决了大部分问题。具体的内容在下面叙述。 二、大致步骤 QT += network .pro文件添加network #include <QUdpSocket> 导入头文件 QUdpSocket* udpSocket = new QUdpSocket; new个对象 udpSocket->setSocketOption(QAbstractSocket::MulticastLoopbackOpt 阅读详情
AI摘要

本文探讨了使用QT进行UDP组播时常见的问题,包括接收不到数据的原因及解决方法、不同操作系统下的配置差异、编译错误及跨线程使用QUdpSocket的注意事项。

UDP组播时最好不要提客户端/服务端的概念,而是提发送端/接收端的概念,避免出现逻辑理解混乱。

大家在使用QT UDP时,可能会出现下面的情况:

1.接收不到数据

1.1 代码不对

我看有些文章会这样写:

m_udpSocket = new QUdpSocket();
m_udpSocket->bind(QHostAddress::AnyIPv4,8083,QUdpSocket::ShareAddress);
//m_udpSocket->setSocketOption(QAbstractSocket::MulticastLoopbackOption,0); //表示禁止本机接收
m_udpSocket->joinMulticastGroup(m_McastAddr);
connect(m_udpSocket,SIGNAL(readyRead()),this ,SLOT(processPendingDatagrams()));
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

在接收端加入语句

m_udpSocket->setSocketOption(QAbstractSocket::MulticastLoopbackOption,0);
   
  • 1
  • 1

是无法接收到数据的,需要注释掉。

bind Ip时使用QHostAddress::AnyIPv4是必要的。

1.2 Windows能接收,Linux接收不到

以中标麒麟举例,它的防火墙中默认情况下,我们设置的端口号,是没有权限的,所以要在防火墙中放开限制;那么其他Linux操作系统可能也是这种问题。

2.编译错误,报socket在不同的线程使用

一般应用中我们会在线程中接收数据,然后用另一个线程解析数据,以达到防止主线程卡死的问题;无论是继承QThread重载run函数;还是将接收对象moveToThread,都需要注意是在主线程还是在子线程中new的QUdpSocket;因为QUdpSocket是
不支持跨线程使用的如果在接收对象的构造函数中new的QUdpSocket,然后再将接收对象moveToThread,就会出现这个问题,因为此时线程还没有启动,你就已经new了QUdpSocket了。所以要等到线程的started()信号发出后,再创建QUdpSocket。

Qt系列文章之QUdp 补充(Udp 组播收不到数据解决方案) 文章目录前言问题分析问题解决 前言   最近项目用到了Udp,发现Udp加入组播后,尽然收不到设备发送过来的数据,一顿操作,各种问题搜索,发现还是无解,哪怕使用Qt如何设置SO_REUSEADDR方式也尝试过了,发现还是无解 问题分析   先说下SO_REUSEADDR参数,此参数是原生底层udpSocket,需要设置的setSocketOption 方法中的参数,我当时为什么要考虑这个参数呢,因为有同事用原生socket写的udp就能收到,而我用Qt写的竟然收不到,所以当时考虑差异化在这里,其实不是这个问 阅读详情

相关推荐

Qt以太网UDP组播稳定通信实战:解决能发不能收问题

UDP组播是工业控制、车载通信和嵌入式设备间低延迟数据分发的核心技术,其本质是在IP层(224.0.0.0/4地址段)封装数据,并依赖IGMP协议在以太网链路层映射为01:00:5e:xx:xx:xx组播MAC地址。技术价值在于无需建立连接、支持一对多实时广播,但实际落地受TTL跳数限制、多网卡绑定歧义、内核rp_filter策略及Qt socket选项配置精度制约。典型应用场景包括PLC状态同步、域控制器间心跳广播、工控HMI数据订阅等。本文聚焦Qt 5.15+/6.x在物理以太网接口上的UDP组播双向闭

weixin_29202687的博客 236

Qt程序组播接收不到数据

1 本人近期需要开发一个局域网通信的小程序,用qt组播接收和发送,现场部署实施后,在A地设备可以正常接收和发送, 在B地,出现了异常,设备只能发送数据,不能接收数据。(A地和B地设备完全一样,操作系统为win7 ghost版本。) 2 在B处,用wireshark抓包,能抓得到接收的数据,但是qt写的程序确一直接收不到。 3 在B处,用其他能正常使用的小工具能正常接收到组播数据。 qt程序源代码如下: 4 B处设备有两张网卡,禁用其中一张网卡。禁用IPV6,神奇地发现,qt组播就能接收..

u011546034的专栏 5283

Qt-QUdpSocket实现UDP单播、组播与广播技术详解

本文还有配套的精品资源,点击获取 简介:在IT行业中,UDP通信因其低延迟和高效率成为实时数据传输的首选。Qt框架中的QUdpSocket类使得基于UDP的单播、组播和广播通信变得简单易行。本文将详细介绍这三种通信模式的区别和使用QUdpSocket进行UDP通信的基本步骤。此外,还包括通过QUdpSocket实现数据发送和接收的示例代码,以及如何正确设置组播选项和处理广播...

weixin_36300623的博客 3421

Qt UDP Socket丢包问题(实现百兆级速率无丢包)

项目场景: 使用QT下的UDPsocket与伺服驱动进行通信,通过udp每62.5us发送512字节的数据到PC端中。bind绑定后,connect关联槽函数,在槽函数中死循环接收读取发送过来的数据,为了使用户界面不卡死,开启一条单独的线程运行接收的槽函数。 问题描述: 每62.5us发送512字节大概是66M的速度,PC端使用的是百兆网卡,要求在这个速度下持续运行8小时以上。demo运行时卡顿,严重数据传输过程中数据不时出现丢失的情况。查阅资料后发现window提供了接口可以将指定的线程绑定到特定的cpu

cor_csdn的博客 8371

Qt多网卡组播问题解决方法

Qt组播实现起来比较简单,基本步骤是先绑定IP地址和端口,然后加入组播组,将网卡数据准备完成信号与一个数据接收处理的槽函数连接即可。但是如果计算机上多于两块网卡,就必须再增加两个步骤才行:使用setMulticastInterface设置组播网卡,然后加入组播的同时指定网卡joinMulticastGroup(groupAddr, lni[nIndex])。否则的话向组播地址发送数据时,对端的服务器程序就无法接收到数据。

使用QT UDPSOCKET广播,只有本机能收到,别的电脑收不到,怎么解决?

使用QT UDPSOCKET广播,只有本机能收到,别的电脑收不到,是什么原因?怎么解决? 使用QT UDPSOCKET组播,只有本机能收到,别的电脑收不到,是什么原因?怎么解决?

关于QT UDP组播的几个问题

UDP组播时最好不要提客户端/服务端的概念,而是提发送端/接收端的概念,避免出现逻辑理解混乱。大家在使用QT UDP时,可能会出现下面的情况:1.接收不到数据1.1 代码不对我看有些文章会这样写:m_udpSocket = new QUdpSocket(); m_udpSocket-&amp;amp;gt;bind(QHostAddress::AnyIPv4,8083,QUdpSocket::ShareAddress);

唐麦片的专栏 1万+

发tcp,udp发包加上路由器就不通的原因,加上路由器就收不到数据包,程序遇上路由器就不通的原因 我教你,百分百管用

加上路由器就收不到数据包,不通的原因,程序遇上路由器就不通的原因。我教你,百分百管用

麒麟单机无网下Qt UDP广播和组播无法通信问题

麒麟单机无网下Qt UDP广播和组播无法通信问题的解决方案

狼群中的攻城狮 1917

WRF-Chem新手避坑指南:从chem_opt到emiss_opt,那些手册里没明说的参数配置实战

本文为WRF-Chem新手提供从chem_opt到emiss_opt的参数配置实战指南,解析官方文档中未明确的常见陷阱与解决方案。通过华北重霾案例,详细讲解化学机制选择、排放源配置及特殊参数组合的注意事项,帮助用户避开常见错误,提升模拟效率。

weixin_30897079的博客 281

AI赋能工业自动化:传感器大数据实战

工业自动化中AI与传感器大数据的结合,显著提升了生产效率与可靠性。关键技术包括实时数据处理、边缘计算和数字孪生,未来将进一步向自主决策系统演进。

AFAGA_x的博客 416

QT之UDP和组播的使用

QT中udp和组播的使用因为在实际项目中,用户有N个电脑预览实时视频,如果同时有N多个终端去连接服务器,服务器的压力发送数据带宽的压力很大,所以给提出采用组播的方式去解决此类的问题。QT中的udp先简单说下udp,因为组播也是udp的,用udp的比较方便的一种面向无连接的方式,只要绑定本地端口,跟服务器发个信令通知告诉IP和端口,就可以接收服务器端的数据了,但是存在最多的问题就是丢包和乱序,先看下简

渐渐的不归路专栏 3万+

从零到一:基于PX4+Gazebo+ROS2的无人机轨迹跟踪仿真环境全栈搭建

本文详细介绍了在Ubuntu 22.04系统上,从零开始搭建基于PX4、Gazebo Garden和ROS2 Humble的无人机轨迹跟踪仿真环境的完整流程。内容涵盖PX4 SITL编译、Gazebo安装、ROS2配置、Micro XRCE-DDS Agent通信桥接以及QGroundControl地面站部署,并提供了创建自定义ROS2节点实现圆形轨迹跟踪的实战代码与关键调试技巧,帮助开发者快速构建全栈仿真开发环境。

swift5iosmith的博客 919

UDP通信实例(2)--组播初探

UDP组播要注意两点:1)组播收发两端的端口号要一致;2)加入组播的套接字必须绑定IP地址 INADDR_ANY,而不是所在计算机的具体IP,否则会有问题。 下面给一个例子,是从https://www.cnblogs.com/jingliming/p/4477264.html 参考改编来的,结合Qt的线程类,把组播放入子线程处理。代码在ubuntu平台下测试,能正常接收数据。 头文件: #...

liji_digital的博客 3305

全志 T527_Android13 编译 [ 避坑必看 ]

Swap 概念: Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行。当输入编译命令make -j16 的时候,会有如下提示,这是官方建议通过减少编译线程来解决编译时消耗内存过大的问题。Android 13 系统的编译流程,编译一共分为两部分:内核编译与 Android 编译。

公众号:嵌入式分享 2111

Oracle 11g安装教程(保姆级超详细安装教程)

Oracle详细安装步骤,每一步都配有图例引导 ORACLE是数据库(Oracle服务端)。是连接数据库的客户端(Oracle客户端)。是连接oracle的可视化客户端软件。

2302_81846649的博客 1万+

QT学习笔记(13)-QT Socket通信

目录Socket通信基础知识 Socket通信基础知识 在.pro文件中要添加QT += network,否则无法使用Qt的网络功能。

zwz_chome的博客 2161

【AI智能体】Codex 高级进阶使用技巧项目实战操作详解

Codex 高级进阶使用技巧项目实战操作详解

congge 1万+

Linux下QT实现UDP组播方式和Windows下的区别

3.注意之前使用QHostAddress::AnyIPv4绑定的小伙伴需要注意,检查自己发送UDP数据的时候绑定的IP是否和目标IP在同一网段,不然可能会出现,调用发送IP与目的IP不在同一网段(建议禁用自己的无线网卡和虚拟网卡,在有线网卡上配置对应的IP)。很多小伙伴,可能再实现开始可能会先绑定自身的IP,再加入组播组可能会导致收不到组播数据的情况,当你使用bind函数将套接字绑定到固定的IP地址时,该套接字只会接收目标IP为该固定IP的数据包。检查配置路由配置成功后,就可以开始调试啦!

zhouzhouyaonvli的博客 1356

手把手教你学Simulink--基于未来出行解决方案的场景实例:电动飞行汽车(eVTOL)的动力系统建模与仿真

电动垂直起降飞行器零道路拥堵:三维空间飞行绿色低碳:全电驱动,零排放快速响应:城市内15分钟直达低噪音:相比直升机↓20dB📊 预测:2030年全球eVTOL市场规模将超300亿美元,中国、美国、欧洲加速适航认证。本文通过,构建了电动飞行汽车(eVTOL)动力系统高压电池系统建模电力电子(DC-DC、逆变器)实现PMSM电机+螺旋桨推进系统搭建完整飞行任务动态仿真性能KPI评估与优化。

MHD0815的博客 443

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

UDP通信示例:单播、组播、广播(Qt实现)

UDP通信示例:单播、组播、广播(Qt实现) 去发现同类优质开源项目:https://gitcode.com/ 项目简介 本资源文件提供了一个使用Qt实现的UDP通信示例,涵盖了UDP单播、组播和广播的实现方式。通过下载并解压缩该工程文件包,您可以直接导入工程并运行,快速了解和学习UDP通信的基本原理和实现方法。 资源描述 UDP(用户数据报协议)是一种轻量级的、不可靠的、面向数据报的、无连接的协...

gitblog_09773的博客 735

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

局域网设备查找和发现,局域网软件在线更新,Qt udp组播

使用udp组播原因: 想要实现查找局域网自己的设备,但是不知道存在设备的ip; 局域网软件在线更新,不想固定服务器的ip地址,因为是开发人员电脑,ip可能随时在变化; 比较了广播、组播的优缺点,最终选择组播; 组播优点: 组播技术的初衷是在IP网络中,以"尽力而为"的形式发送信息到某个目标组,这个目标组称为组播组,这样在有源主机向多点目标主机发送信息需求时,源主机只发送一份数据,数据的目的地址是组播组地址,这样,凡是属于该组的成员,都...

qq_36626674的博客 2292

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Qt+UDP及封装

一、单播 1、声明udp对象 QUdpSocket* udpClient; 2、new出对象 udpClient = new QUdpSocket(this); 3、分配本地地址(如果不分配,使用系统自动分配的),设置接收槽函数 udpClient.bind("192.168.1.1”,8080); QObject::connect(this->udpClient,SIGNAL(ready...

大AI时代,人性化的信息更加难得可贵 163

QT接受不到组播数据问题

摘要:网络调试问题的解决步骤包括:1.检查网络调试助手能否接收数据,尝试多个IP;2.使用Wireshark抓包排除组播问题;3.在QT中检查网卡选择是否正确,建议注销无用网卡后测试。若能正常接收,则表明是网卡问题,可在QT中增加网卡选择功能。

m0_55601564的博客 78

工控机之UDP组播

monitor_socket_set/monitor_muticast_IP=225.0.0.100 # 组播地址。│ │管理平台 │ │采集设备 │ │。一句话:多网卡机器上,不指定的话,组播数据可能走错网卡,对面根本收不到。│ 网卡1: 129.26.20.231 ───→ 监控网 │。│ 网卡2: 192.168.1.150 ──→ 采集网 │。│ 网卡3: 10.0.0.1 ──→ 管理网 │。

老赵的博客 230
上一篇: Qt调用jrtplib实现单播、多播和广播
下一篇: Qt之显示yuv数据图像
ASKLW
博客等级 码龄14年 494粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值