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博客

相关推荐

  1. Qt + mqtt对接阿里平台(

    2024-03-11 21:12:03       50 阅读
  2. 阿里公有平台

    2024-03-11 21:12:03       49 阅读
  3. 对比阿里的SofaMQ与RocketMQ

    2024-03-11 21:12:03       47 阅读
  4. 阿里对象存储(OSS)服务

    2024-03-11 21:12:03       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-11 21:12:03       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-11 21:12:03       97 阅读
  3. 在Django里面运行非项目文件

    2024-03-11 21:12:03       78 阅读
  4. Python语言-面向对象

    2024-03-11 21:12:03       88 阅读

热门阅读

  1. 2023 年 3 月青少年软编等考 C 语言一级真题解析

    2024-03-11 21:12:03       42 阅读
  2. Linux信号机制

    2024-03-11 21:12:03       33 阅读
  3. PLIP,openbabel安装避坑

    2024-03-11 21:12:03       56 阅读
  4. LLDB-调试

    2024-03-11 21:12:03       41 阅读
  5. leetcode周赛388(1-3)

    2024-03-11 21:12:03       43 阅读
  6. 网络、UDP编程

    2024-03-11 21:12:03       38 阅读
  7. 安卓 Kotlin 面试题 31-40

    2024-03-11 21:12:03       44 阅读
  8. Rust 泛型使用过程中的 <T> 和 ::<T> 的区别

    2024-03-11 21:12:03       41 阅读
  9. 目标检测:Anchor-free算法模型

    2024-03-11 21:12:03       43 阅读