Qt + mqtt对接阿里云平台(二)

一、MQTT协议

1、MQTT相关概念

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上。

在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

订阅(Subscription)

订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS)。订阅会与一个会话(Session)关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。

会话(Session)

每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可

主题名(Topic Name)

连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。

主题筛选器(Topic Filter)

一个对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。

负载(Payload)

消息订阅者所具体接收的内容。

二、CONNECT协议格式

格式:固定包头+可变包头+有效载体

1、固定包头

长度:2~5bytes

包括报文类型(1),固定保留位(0)和剩余长度。

|-----------|---|---|---|---|---|---|---|---|
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Byte 1 | 报文类型 |||| 保留位 ||||
| | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| Byte 2... | 剩余长度值 ||||||||

剩余长度等于可变报头的长度(10字节)加上有效载荷的长度。

剩余长度

|-------|------|------|------|------|------|------|------|
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
| 进位标志位 | 数据位 |||||||

2、可变抱头

|---------|----------------------------------------------------------------------------------------------------------------------------------------------------|---|---|---|---|---|---|---|---|
| | 描述 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 协议名 ||||||||||
| Byte 1 | Length MsB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Byte 2 | Length LsB(4) | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| Byte 3 | 'M' | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
| Byte 4 | 'Q' | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
| Byte 5 | 'T' | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
| Byte 6 | 'T' | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
| 协议级别 ||||||||||
| Byte 7 | Level (4)级别 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 连接标志 Connect Flags ||||||||||
| Byte 8 | User Name Flag(1)用户名标志 Password Flag(1)密码标志 Wil Retain (0)Wi 保留标志 Will Qos (01)Wi 服务质量 保持连接时间 Wil Flag(1)Wi 标志 Clean Session(1)清理会话 Reserved(0)保留位 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 |
| 保持连接时间 ||||||||| |
| Byte 9 | 保持连接 MSB(0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Byte 10 | 保持连接 LSB(10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |

长度:10bytes

Byte8 连接标志(Connect Flags)

连接标志字节包含一些用于指定MQTT连接行为的参数。它还指出有效载荷中的字段是否存在。

Byte9 Byte10 保持连接

长度:2bytes

保持连接(KeepAlive)是一个以秒为单位的时间间隔,表示为一个16位的字,它是指在客户端传输完成一个控制报文的时刻到发送下一个报文的时刻,两者之间允许空闲的最大时间间隔。如果在设置的时间的1.5倍内没有发送报文,则自动断开连接。

0x00 0x64表示100s。

3、有效载体

有效载体可以分为:ClientID+Username+Password

每个部分前面有2个字节是该部分的长度。表示16位的长度

2Byte(ClientID长度) + ClientID + 2Byte(Username长度) + Username + 2Byte(Password长度) + Password

三、QMqtt编译集成

1、源码下载

地址:点击跳转

2、打开工程qmqtt.pro进行编译

若报一下错误,则将client.pro里面的 qmqtt 注释掉

:-1: error: Project ERROR: Unknown module(s) in QT: qmqtt

3、集成QMqtt库

首先,新建一个项目工程,并在.pro文件添加如下信息:

QT += network

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -lQt5Qmqtt

else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -lQt5Qmqtt

else:unix: LIBS += -L$$PWD/lib/ -lQt5Qmqtt

INCLUDEPATH += $$PWD/mqtt

DEPENDPATH += $$PWD/.

然后,将编译生成的lib以及源码src下的mqtt整个文件夹拷贝到当前工程目录下。

最后,在自己的源码添加以下头文件就可以使用qmqtt库的接口了。

#include "mqtt/qmqtt.h"

qmqtt对接阿里云例程:点击跳转

参考博客:ESP32/ESP8266 MQTT协议接入阿里云(二)_esp8266上传数据到阿里云的数据格式-CSDN博客

彻底搞懂Qt-MQTT开发_qt mqtt-CSDN博客

相关推荐
Johny_Zhao8 分钟前
AI+自动化测试系统方案:网络设备与网络应用智能测试
linux·网络·人工智能·python·网络安全·docker·ai·信息安全·云计算·ansible·shell·cisco·huawei·系统运维·itsm·华三·deepseek
Blossom.1183 小时前
基于区块链技术的供应链溯源系统:重塑信任与透明度
服务器·网络·人工智能·目标检测·机器学习·计算机视觉·区块链
赵庆明老师3 小时前
【原创】使用阿里云存放一个临时共享的文件
阿里云·云计算
冷崖3 小时前
网络编程-select(二)
网络·学习
shane-u4 小时前
阿里云Docker镜像加速配置指南
阿里云·docker·云计算
AORO_BEIDOU5 小时前
遨游科普:三防平板是什么?有什么功能?
网络·5g·安全·智能手机·电脑·信息与通信
比奥利奥还傲.5 小时前
如何利用内网穿透实现Cursor对私有化部署大模型的跨网络访问实践
网络
tyatyatya6 小时前
MATLAB中进行深度学习网络训练的模型评估步骤
网络·深度学习·matlab
Johny_Zhao6 小时前
Vmware workstation安装部署微软WSUS服务应用系统
网络·人工智能·网络安全·信息安全·云计算·系统运维·wsus
眠りたいです7 小时前
从数据包到可靠性:UDP/TCP协议的工作原理分析
linux·网络·网络协议·tcp/ip·udp·传输层