概述
推荐一款稳定的基于C编写的MQTT Client开源库 [cMQTT](http://github.com/YorkJia/cMQTT)
[MQTT协议详解及开发教程(一)MQTT协议概述](http://zhuge.blog.csdn.net/article/details/112117654)
[MQTT协议详解及开发教程(二)MQTT服务器EMQx搭建](http://zhuge.blog.csdn.net/article/details/112121535)
[MQTT协议详解及开发教程(三)MQTT Client工具软件选择及简单测试](http://zhuge.blog.csdn.net/article/details/112124842)
[MQTT协议详解及开发教程(四)MQTT协议报文格式](http://zhuge.blog.csdn.net/article/details/112133809)
[MQTT协议详解及开发教程(五)CONNECT/CONNACK报文分析](http://zhuge.blog.csdn.net/article/details/112142716)
[MQTT协议详解及开发教程(六)PUBLISH发布QoS0消息报文分析](http://zhuge.blog.csdn.net/article/details/112155415)
[MQTT协议详解及开发教程(七)PUBLISH发布QoS1报文流程分析](http://zhuge.blog.csdn.net/article/details/112171023)
[MQTT协议详解及开发教程(八)PUBLISH发布QoS2报文流程分析](http://zhuge.blog.csdn.net/article/details/112175748)
[MQTT协议详解及开发教程(九)订阅SUBSCRIBE及SUBACK报文流程分析](http://zhuge.blog.csdn.net/article/details/112182255)
[]()
# 前言
在上一篇文章中,我们对PUBLISH发布QoS 2报文进行了分析,本文我们接着分析SUBSCRIBE及SUBACK的报文流程,“订阅机制”是MQTT协议的一大特点,个人也认为是MQTT最大的一个亮点。关于“订阅”的含义,可以参考前面的文章,这里不再赘述。
**SUBSCRIBE的QoS等级不同,但是报文结构是相同的,所以本文以QoS2举例**
# 1. Client 订阅SUBSCRIBE 主题示例
![订阅QoS 2主题示例](https://img-blog.csdnimg.cn/20210104160616464.png#pic_center)
## 1.1 SUBSCRIBE抓包
![SUBSCRIBE抓包](https://img-blog.csdnimg.cn/20210104160725986.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIzNTEwNTE=,size_16,color_FFFFFF,t_70#pic_center)
源码如下:
```C
82 0e 00 09 00 09 54 65 73 74 54 6f 70 69 63 02
```
## 1.2 固定报头
**82 0e**
其中:
**82** -- 对应的控制报文类型为SUBSCRIBE
**0e** -- 剩余长度0x0e = 14个字节
## 1.3 可变报头
**00 09** 当前的报文 packet ID为 2
## 1.4 有效载荷
### 1.4.1 订阅topic信息
**00 09 54 65 73 74 54 6f 70 69 63**
其中,
**00 09**--对应topic 长度。
**54 65 73 74 54 6f 70 69 63** --对应的ASCII码:TestTopic
### 1.4.2 订阅topic的QoS值
**02**--表示QoS 2
# 2 SUBACK 报文分析
## 2.1 SUBACK 抓包
![SUBACK抓包](https://img-blog.csdnimg.cn/20210104161655375.png#pic_center)
源码:
```C
90 03 00 09 02
```
## 2.2 固定报头
**90 03**
其中:
**90** -- 对应的控制报文类型为PUBREC,
**04** -- 剩余长度0x03 = 3个字节
## 2.3 可变报头
**00 09**
这里就是报文描述符Packet ID,与SUBSCRIBE中的是一致的。
## 2.4 有效载荷
返回码,每个返回码对应等待确认的SUBSCRIBE报文中的主题过滤器QoS,返回码的顺序必须与SUBSCRIBE报文中的QoS相同。
返回码值定义:
|值|状态|描述|
|--|--|--|
|0x00|成功|最大QoS 0|
|0x01|成功|最大QoS 1|
|0x02|成功|最大QoS 2|
|0x80|失败|订阅失败|
最后
以上就是风趣台灯为你收集整理的MQTT协议详解及开发教程(11)心跳请求PINGREQ及响应PINGRSP报文流程分析的全部内容,希望文章能够帮你解决MQTT协议详解及开发教程(11)心跳请求PINGREQ及响应PINGRSP报文流程分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复