Qt中Udp通信、Udp广播和组播(QT七)

2023-11-11

一、UDP通信

发送的是数据报, 数据报接收顺序与发送顺序可以不一致,

实时性强,数据安全得不到保证

应用(视频传输, 视频会议, 音频传输)

1.Qt中udp通信QUdpSocket

(1)发送端:

①创建QUdpSocket对象

QUdpSocket msocket;

②调用对象方法发送数据writeDatagram

msocket.writeDatagram(data.toUtf8(),QHostAddress(ip), port.toUShort());

(2)接收端:

①创建QUdpSocket对象

QUdpSocket msocket;

②绑定

msocket.bind(QHostAddress::AnyIPv4, port.toUShort());

③当QUdpSocket对象有数据可读的时候会发送readyRead信号 (发送者, 什么时候, 槽函数)

connect(&msocket, &QUdpSocket::readyRead,this, &UdpRecv::read_data);

④在信号关联的槽函数中调用对象方法接收数据readDatagram

char  array[1024]={0};//保存数据
msocket.readDatagram(array, 1024);

2.Udp通信广播

192.168.1.255 组播224.0.0.0
在这里插入图片描述

(1)app端UdpApp

①创建QUdpSocket对象

QUdpSocket msocket;

②发送广播 -> (端口要预先与控制器固定9999)

msocket.writeDatagram(data.toUtf8(),QHostAddress(广播地址), 9999);

③接收到控制器反馈ip -> 当msock有数据可读的时候会发送readyRead信号

connect(&msocket,&QUdpSocket::readyRead,this,&AppWin::get_ip);

(2)控制器端UdpControl

①创建QUdpSocket

QUdpSocket msocket;

②绑定地址(端口号预先与app固定9999)

msocket.bind(QHostAddress::AnyIPv4, port.toUShort());

③接收广播数据–反馈控制器ip地址(当QUdpSocket对象有数据可读的时候会发送readyRead信号)

    //关联读数据信号readyRead--接收广播数据
    connect(&msocket, &QUdpSocket::readyRead, this, &UdpControl::recv_broadcast);
    QHostAddress appaddr;
    quint16 port;
    QByteArray array; //要另外分配空间
    qint64 size = msocket.bytesAvailable();//获取当前有多少字节数据可读
    array.resize(size);//分配空间
    msocket.readDatagram(array.data(),array.size(),&appaddr, &port);
    //给发送方回馈数据--给app端发送数据
    msocket.writeDatagram("ip",3, appaddr, port);

3.Udp通信组播

224.0.0.0 ---- 239.255.255.255

(1)组播发送端:

①创建QUdpSocket

QUdpSocket msocket;

②发送数据到组播地址

msocket.writeDatagram(data.toUtf8(),//要发送的数据
QHostAddress(ui->ipEdit->text()),//组播地址
ui->portEdit->text().toUShort());//端口号

(2)组播接收端:

①创建QUdpSocket

QUdpSocket msocket;

②绑定

msocket.bind(QHostAddress::AnyIPv4, port.toUShort());

③在槽函数中读取数据 -----当QUdpSocket对象有数据可读的时候会发送readyRead信号)

connect(&msocket, &QUdpSocket::readyRead, this, &MultiCastRecv::recv_multicast);
QHostAddress appaddr;
quint16 port;
QByteArray array; //要另外分配空间
qint64 size = msocket.bytesAvailable();//获取当前有多少字节数据可读
array.resize(size);//分配空间
msocket.readDatagram(array.data(),array.size(),&appaddr, &port);
//给发送方回馈数据--给app端发送数据
msocket.writeDatagram("ip",3, appaddr, port);

(3)如果要接收组播数据

添加到组播组

//获取组播地址
QString multiAddress = ui->ipEdit->text();
//加入组播组
if(msocket.joinMulticastGroup(QHostAddress(multiAddress)))
{
    //把地址添加到列表中去
    ui->listWidget->addItem(multiAddress);
}
else
{
    qDebug()<<"加入失败";
}

(4)如果不想接收组播数据

离开组播组

QString multiAddress = item->text();
if(msocket.leaveMulticastGroup(QHostAddress(multiAddress)))
{
     delete item;
}
else
{
     qDebug()<<"退出失败";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt中Udp通信、Udp广播和组播(QT七) 的相关文章

  • Caliburn.Micro - ShowDialog() 如何关闭对话框?

    EDIT 新信息 刚刚设法让记录器工作 老实说 我不知道 cm 有一个 并且在尝试使用时收到此消息TryClose TryClose requires a parent IConductor or a view with a Close m
  • 生成多个随机数

    我想生成 25 个唯一的随机数并将它们列在控制台中 数字的长度应至少为 10 个字符 有什么简单的方法可以做到这一点吗 尝试将数字构建为字符串 并使用 HashSet 确保它们是唯一的 Random random new Random Ha
  • STL之类的容器typedef快捷方式?

    STL 容器的常见模式是这样的 map
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • ASP.NET - 在 RenderContent 调用中将事件处理程序添加到 Repeater 内的 LinkBut​​ton

    我有一个加载自定义用户控件的 Sharepoint WebPart 用户控件包含一个 Repeater 而 Repeater 又包含多个 LinkBut ton 在 Web 部件的 RenderContent 调用中 我有一些用于添加事件处
  • 如何在C中同时运行两个子进程?

    所以我开始学习并发编程 但由于某种原因我什至无法掌握基础知识 我有一个名为 fork c 的文件 其中包含一个 main 方法 在此方法中 我将 main 分叉两次 分别进入子进程 1 和 2 在孩子 1 中 我打印了字符 A 50 次 在
  • Monotouch全局异常处理

    我在野外发现了一只令人讨厌的虫子 但我无法确定它的具体情况 有没有办法拥有全局 Try Catch 块 或者有办法处理 Monotouch 中未处理的任何异常 我可以包起来吗UIApplication Main args 在 try cat
  • 对作为函数参数传递的指针使用删除

    删除作为函数参数传递的指针是否可以 并且合法 如下所示 include
  • 如何让XmlReader读取C#中的属性?

    我有一个 XML Stream 其中包含以下 XML 内容
  • 更改 Xamarin.Forms 应用中顶部栏和底部栏(ControlsBar、StatusBar)的颜色

    无论如何 即使后面需要特定于平台的代码 也可以更改顶部栏 蓝色的 和底部栏 黑色的 的颜色吗 我希望添加对浅色和深色模式的支持 因此我希望能够在运行时更改它 有可能的 Android Using Window SetStatusBarCol
  • DataGridView 行背景颜色没有改变

    我想根据加载时的特定条件更改 DGV 行的背景颜色 即使在 Windows 窗体中也是如此 但我看不到任何 DGV 行的颜色有任何变化 谁能告诉我如何解决这个问题 private void frmSecondaryPumps Load ob
  • 如何在 C# 中更改公共 IP 地址

    我正在创建一个 C winform 应用程序 我想在其中更改公共 IP 地址 而不是像 Hotspot Shield ZenMate OpenVPN 等那样更改 IPv4 地址 我已经检查了以下链接 但没有找到足够的帮助 所以我发布了这个问
  • 传递数组时在 C 中的函数参数中强制指定数组大小

    Context 在 C 中 我有一个以数组作为参数的函数 该参数用作该函数的输出 输出的大小始终相同 我会 让阅读代码的人清楚所需的大小 不过它已经在函数注释中了 理想情况下 编译会输出警告或错误 这样我就可以在编译时而不是运行时防止出现问
  • valgrind 在 Raspberry Pi 上返回未处理的指令

    我最近一直在尝试在运行 Debian GNU Linux7 0 喘息 的树莓派 型号 b 上使用 valgrind 来调试分段错误 每次我在编译的 C 程序上运行 valgrind 时 都会得到类似以下内容的信息 disInstr arm
  • 如何同步nosql db(ravendb)中的更改

    我已经开始在 RavenDB 的示例上学习 NoSQL 我从一个最简单的模型开始 假设我们有由用户创建的主题 public class Topic public string Id get protected set public stri
  • 如何从 Access 数据库中读取“是/否”值作为布尔值?

    帮我找回YES NO来自 MS Access 的布尔格式数据类型 我尝试解析它 但它总是返回 false 更新 实际上不是问题抱歉 它确实接受 YES NO 作为布尔值 OleDbconnection dbConnect new OleDb
  • 卸载程序

    我正在尝试使用此代码卸载程序 但它似乎不起作用 我尝试过其他答案 但似乎也不起作用 有人可以帮助我吗 我正在尝试按给定名称 displayName 卸载该程序 例如 我给出 displayName Appname 那么此代码应该从我的计算机
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 具有四个 && 的 LINQ Where 子句

    我正在尝试在Where 子句中创建一个带有4 个参数的LINQ 查询 这是一个 Windows 8 应用程序项目 我正在使用 SQLite 数据库 SQLite 实现 https github com praeclarum sqlite n
  • 如何使用 C# 为 azure devops 变量赋值

    我有 selenium C 测试脚本 可以从浏览器获取令牌 我有两个 azure devops 任务 一个用于执行 selenium 测试 另一个用于执行 API 测试 我想将 selenium 测试获取的令牌传递给 API 测试执行任务

随机推荐

  • ffplay源码解析-main入口函数

    main入口函数 初始化 变量 缓存区 SDL窗口初始化等 int main int argc char argv int flags VideoState is av log set level AV LOG TRACE init dyn
  • L1-086 斯德哥尔摩火车上的题(15分) Python

    上图是新浪微博上的一则趣闻 是瑞典斯德哥尔摩火车上的一道题 看上去是段伪代码 s a 1112031584 for i 1 i lt length a i if a i 2 a i 1 2 s max a i a i 1 goto url
  • 2020-11-24-ElasticSearch7.x学习笔记

    笔记记录 B站狂神说Java的ElasticSearch课程 https www bilibili com video BV17a4y1x7zq 在学习ElasticSearch之前 先简单了解一下Lucene Doug Cutting开发
  • 根据PV或者QPS来计算需要多少台机器

    QPS 单个进程每秒请求服务器成功的次数 req sec 总请求数 进程总数 请求时间 一般使用http load进行统计 每台服务器每天的PV QPS x 3600 x 6 或者乘以8小时 一天按照6或者8小时计算 晚上可能没人访问 服务
  • Conda环境 下载Jupyter Lab并使用

    1 下载Jupyter Lab conda 安装方式 conda install jupyterlab conda install c conda forge jupyterlab python 安装方式 pip install jupyt
  • python waitress_python 角度理解web服务器

    概述 web服务器实际上就是一个运行在物理机上的网络服务器 它等待客户端给他发送请求 成功接收后将客户端请求的资源响应给它 客户端与服务端的通信通过http协议实现 客户端可以是浏览器或者可以发送请求的一段程序 一 一个简单的web服务器
  • Android11 热点设置永不关闭

    Android11 热点设置永不关闭 文章目录 Android11 热点设置永不关闭 一 前言 二 framework设置热点永不超时关闭 三 基于 SoftApManager java 研究超时逻辑 三 总结 1 设置热点不关闭的方法 1
  • cutlass入门: 调用cutlass做通用矩阵乘法Gemm(附代码)

    cutlass是CUDA C 模板抽象的集合 用于实现CUDA中所有级别和规模的高性能矩阵乘法 GEMM 和相关计算 相较于cuBLAS和cuDNN cutlass中包含了更多可重用的模块化软件组件 这使得cutlass相较于前两者更为灵活
  • 详细介绍InnoDB数据存储结构

    InnoDB数据存储结构 1 数据库的存储结构 页 索引结构给我们提供了高效的索引方式 不过索引信息以及数据记录都是保存在文件上的 确切说是存储在页结构中 另一方面 索引是在存储引擎中实现的 MySQL服务器上的存储引繁负责对表中数据的读取
  • 接口测试简介以及接口测试用例设计思路

    接口测试简介 1 什么是接口 接口就是内部模块对模块 外部系统对其他服务提供的一种可调用或者连接的能力的标准 就好比usb接口 他是系统向外接提供的一种用于物理数据传输的一个接口 当然仅仅是一个接口是不能进行传输的 我们还的对这个接口怎么进
  • OpenCV读取图像_显示图像和保存图像

    配置好 OpenCV 以后 包含以下两个头文件 include cv h include highgui h IplImage image cvLoadImage D 123 jpg 1 函数cvLoadImage 的第1 个参数是图像文件
  • C++中插件使用举例

    插件并不是在构建时链接的 而是在运行时发现并加载的 因此 用户可以利用你定义好的插件API来编写自己的插件 这样他们就能以指定方式扩展API的功能 插件库是一个动态库 它可以独立于核心API编译 在运行时根据需要显示加载 不过插件也可以使用
  • 左耳朵耗子:拖累开发团队效率的困局与解决之道

    作者 陈皓编辑 小智影响软件开发团队效率的因素有许多 产品和业务上的效率问题固然是根本 但很多时候 这种问题并没有解 如果只从软件开发的过程出发 哪些开发方式是典型 又该怎么解呢 写在前面 我之前写过一篇叫 加班与效率 的文章 从概念上说了
  • outlook中打开链接时收到错误信息

    http helpdesk blog 51cto com 219783 233525 症状 outlook中打开链接时收到错误信息 一般性错误 http 找不到应用程序 原因 IE非默认浏览器 解决方法 打开任意文件夹 工具 文件夹选项 文
  • 【python】—— python的基本介绍并附安装教程

    前言 今天 我将给大家讲解关于python的基本知识 让大家对其有个基本的认识并且附上相应的安装教程以供大家参考 接下来 我们正式进入今天的文章 目录 前言 一 Python 背景知识 二 Python 都能干啥 三 Python的优缺点
  • 判断一个数是否为素数之费马测试

    费马测试被称为概率性素性测试 它判断的是 某个数是素数的概率大不大 如果P为素数 那么所有比P小的数Q都满足公式 QP mod P Q 即 例素数5的性质 比素数5小的数有4 3 2 1 那么 45 45 1024 mod 5 4 35 3
  • 电脑性能,如何提高电脑性能 方法介绍【图文教程】

    在这个信息传播飞速的当下 网络是人们必不可少的传播工具 网络传播信息的途径就是通过电脑 电脑如今已经是每家每户的宠儿了 几乎每个人都有自己的电脑 然而电脑与电脑之间也有差异 它们最大的不同就是性能方面 影响性能的主要因素是硬件 当然还有其它
  • C#学习教程六

    C 异常机制具有如下的特征 1 所有异常必须用System Exception类或者从System Exception派生的类实例来标识 2 可以使用fianlly块编写在正常执行或异常情况下都要执行的终止代码 3 系统级的异常如移除 被零
  • keepalived双主模式(互为主备)

    考虑到keepalived高可用 备节点的机器基本上属于空闲状态 很浪费硬件资源 所以我们可以让keepalived互为主备 跑多个实例 第一个节点配置 vim etc keepalived keepalived conf global d
  • Qt中Udp通信、Udp广播和组播(QT七)

    目录 一 UDP通信 1 Qt中udp通信QUdpSocket 1 发送端 2 接收端 2 Udp通信广播 1 app端UdpApp 2 控制器端UdpControl 3 Udp通信组播 1 组播发送端 2 组播接收端 3 如果要接收组播数