QT5 “Multicast Receiver Example”组播接收数据的说明

【Qt】QLocalSocket与QLocalServer问题:接收不到数据、只能收到第一条、数据不完整解决方案【2023.05.24】 Qt很强大,但是Qt的帮助文档、API属实是让我们走不少弯路。QLocalSocket一个很简单的东西,我仅想用来实现一个简单的本地进程通信,就遇到了:客户端循环发送数据,服务端只能接收到一条、接收到数据不完整等奇奇怪怪的现象。 阅读详情

本文基于的QT版本为5.13.0。在更早支持组播的QT版本中,应该也是适用的。

在QT提供的“Multicast Receiver Example”示例程序中,udpSocket4这个QUdpSocket对象,是使用下面的方式,进行绑定和加入组播的:

    udpSocket4.bind(QHostAddress::AnyIPv4, 45454, QUdpSocket::ShareAddress);
    udpSocket4.joinMulticastGroup(groupAddress4);

通常情况下,这是没有问题的。

这里的“通常”,在于以下的场景:本地只有一个网络接口;或者只有一个ipv4;或者不介意绑定端口上收到的数据既有发送到组播(groupAddress4)地址的,也有可能是直接发给本地的ipv4地址的;或者发送方/接收方的端口丰富可协商,对每类业务,都能分配不同的地址/端口,等等。

然而,若是确实有脱离“通常”情况的需求时,你仍然需要对windows、linux的bind操作,进行分别的处理,在“linux下UDP组播接收不到数据的说明”一文中,对基于libuv、原生编程的两种情况的方案进行了说明,保持尽量的完整性,再补充一下关于QT的实际方案:

#if defined(_WIN32)
    udpSocket4.bind(QHostAddress("指定的本地ipv4地址,非0.0.0.0"), 45454, QUdpSocket::ShareAddress);
    udpSocket4.joinMulticastGroup(groupAddress4);
#else // 简略假设只有linux:__linux__
    // 下面是linux的不同点
    udpSocket4.bind(groupAddress4, 45454, QUdpSocket::ShareAddress);
    udpSocket4.joinMulticastGroup(groupAddress4);
#endif

 

其他

从unix网络编程中,可以较明确的获取到,在linux中,为何要这样绑定的原因说明。相反的,windows里的实现考虑,我们就不得而知了。然而,相比较而言,windows的使用方式,私以为是更为舒适的(尽管会造成同端口上,单播和组播的混乱)。

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

相关推荐

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

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

总结QUdpSocket组播数据发不出去问题

1是允许loopback模式(自发自收),0是阻止。这个阻止还是允许,不同系统又不同的解释:假如在同一台计算机上有两个应用程序,并且加入了同一个组播。这两个程序,一个允许回环,一个阻断回环,则会有如下现象:windows下,允许方不能发向阻断方,但阻断方可以发向允许方;linux下,允许方可以发向阻断方,但阻断方不能发向允许方。

houmingyang的专栏 5736

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

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

Qt udp 广播之接收端接收不到数据

发生udp广播接收不到数据的原因可以从以下几个方面考虑下 1、发送端和接受端是否在同一局域网内 2、ping 对方电脑ip 看看可以ping 的通不 ping 192.168.0.37(电脑ip) 3、看一下udp绑定的端口有没有被占用 4、是否开启了虚拟机,如果开启了虚拟机,需要把虚拟机禁用下 ...

weixin_46068528的博客 7083

一篇NS SAR ADC的学习记录

一篇NS SAR ADC的学习记录 内容包含: OverSampling Noise Shaping Dynamic Amplifier DAC with Redundancy 最近看了些有意思的SAR ADC结构,但是因为确实对模拟这个领域不太熟,导致了一系列的级联查找,最终达到了一个大概能懂的状态,为了理清思路,顺便别让看了这么些天的东西浪费了,还是计划写篇文章。 ps:由于不是一篇特别正紧的报告,参考文献就写的比较随便,且我还是个做数字的 A 13.5-ENOB, 107-μW Noise-Sha

weixin_45669724的博客 8710

SAP中MRP运行计划行超限问题的分析与解决

SAP中基于生产性物料的采购特点,通常会采用采购计划协议的方式进行采购。其具体的采购计划通常来自于成品计划独立需求,然后通过物料清单,经由MRP跑出。 在采购计划协议中的计划行中,存在一个计划行号,随着MRP在不断跑出新的计划行,该行号资源会消耗完。当计划行号消耗完后,MRP不会再跑出新的计划行。且在MD04或MD02中看不到类似提示信息。此时可以通过MD05来查看是否出现类似下图的提示信息。 ...

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 3844

终极办法解决QT程序接收发送组播数据异常

组播地址:239.1.1.15。系统:windows 10。端口号:收发都是6002。

u011546034的专栏 4022

RTAB-MAP实战:用Realsense D435i在ROS中搭建室内3D地图(附避坑指南)

本文详细介绍了如何在ROS环境下,使用Intel Realsense D435i深度相机和RTAB-MAP算法进行室内3D地图构建的完整实战流程。内容涵盖环境配置、核心节点数据流解析、关键参数调优、地图保存与重定位,并提供了实用的避坑指南,帮助机器人开发者和研究者快速实现稳定的视觉SLAM应用。

weixin_29095049的博客 490

QT udp组播接收不到数据

自发自收。

weixin_42195999的博客 2005

2021-3-20组会 无监督训练下的音频分离 (音源分离) Unsupervised Audio Source Separation Using Generative Priors

0. 说明 一片具体论文的综述

ruclion的专栏 1349

【深度学习-番外1】Win10系统搭建VSCode+Anaconda+Pytorch+CUDA深度学习环境和框架全过程

本文将介绍在Windows 10系统下搭建深度学习环境的完整过程,包括安装Anaconda、CUDA、NVIDIA显卡驱动以及Pytorch框架。后续本专栏的Python语言下的深度学习环境都以本篇搭建的为准。

fengzhuqiaoqiu的博客 3997

Qt程序组播接收不到数据

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

u011546034的专栏 5283

自抗扰控制ADRC原理解析及案例应用

ESO的设计通常基于系统动态方程的线性化或近似模型,其输出包括系统状态的估计值和总扰动的估计值。非线性状态误差反馈控制律(Nonlinear State Error Feedback,NLSEF)是ADRC的最后一个环节,负责根据ESO和TD提供的信息生成控制信号。ADRC的另一个重要发展方向是与其他控制策略的融合,如模糊控制、神经网络和自适应控制等,以进一步提高系统的鲁棒性和适应性。ADRC的参数主要包括扩张状态观测器(ESO)的参数和非线性状态误差反馈控制律(NLSEF)的参数。

LIUMAO99的博客 9281

关于QT UDP组播的两个问题

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

ASKLW的博客 6581

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件概述(ArkSIM集成开发环境 (IDE))

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件详述(ArkSIM集成开发环境 (IDE))

918

知识图谱实战应用8-从文本关系抽取到知识图谱关系构建流程贯通

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用8-从文本关系抽取到知识图谱关系构建流程贯通。我们从文本数据中采集到关键信息,并抽取出其中的关系信息,然后在存入图数据库中,整个过程实现自动化,我这里将举一个文本例子进行抽取。 对于知识图谱的构建是将实体、概念和它们之间的关系都以图表形式呈现出来的一种数据结构。要构建一个知识图谱,需要从不同的数据源中采集到相关信息,并将这些信息整合在一起,最终形成一个全面而且精确的知识图谱。

微学AI的博客 2544

解决 QT udp接收不到数据包问题

这个问题困扰了一天,记下笔记,避免重蹈覆辙。 通过bool打印connect是成功连接的,readyRead也相应,但就是收不到数据 UdpCommunication::UdpCommunication(QObject *parent) :QObject(parent) { udpSocket = new QUdpSocket(this); qint16 port; port = 8806; udpSocket->bind(QHostAddress::AnyIPv

qq_45304158的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

关于qt udp接收数据中途收不到数据的解决问题

自己编的udp广播接收数据,刚开始能正常接收,运行一会就收不到数据了,查了好多资料,说是设置定时器监测udp socket状态,如果异常,就重启,最简便就是手动发送readyread信号。但想请教各位大神,为啥会出现这样的问题呢?而且出现也是随机的,不定啥时候会出现。还有,我两个软件,有一会就基本没有出现,另一个几率大,接收代码基本一样的。

weixin_41852956的博客 2129

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Qt网络UDP广播包发不出去或接收不到问题-虚拟网卡

关闭安装了vmwate创建的虚拟网卡,问题解决。 可能网卡太多了,qt不知道用哪一个了。

weixin_44815436的博客 4602

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

QUdpSocket 无法触发 readReady() 收不到组播的一种解决办法

试了很多种网上的方法,最后在《QT5开发及实例》的“第10章 Qt 5网络与通信”的UDP例程中找到了解决办法。 网络上很多的例子都如下所示。 uSocket = new QUdpSocket; uSocket->bind(QHostAddress("127.0.0.1"), PORT); connect(uSocket, SIGNAL(readyRead()), this, SLOT(receive())); 他们都使用了Qt助手中"bind"函数的第一种重载形式,我之前也是使用的这...

ruiwentao_120的专栏 6215

QUdp组播在多网卡工况下接收不到数据解决办法

摘要: 针对QUdp组播在多网卡环境下偶尔发送成功但接收不到数据的问题,提出两种解决方案:1) 显示网卡名与IP地址的绑定关系,方便用户选择;2) 通过绑定指定网卡建立稳定连接。关键步骤包括筛选有效IPv4地址、校验选中网卡与IP的匹配性,并正确配置组播参数(如禁用回环)。实现代码展示了如何动态加载本地IPv4地址列表,并通过joinMulticastGroup加入组播组,确保数据收发可靠性。适用于多网卡场景下的UDP通信优化。

qq_44084616的博客 351

关于QT UDP组播的几个问题

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

唐麦片的专栏 1万+

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

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

狼群中的攻城狮 1915
上一篇: linux下UDP组播接收不到数据的说明
下一篇: libuv套接字绑定失败导致的退出异常
smartcore
博客等级 码龄19年 30粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值