推荐一款稳定的基于C编写的MQTT Client开源库 cMQTT
MQTT协议详解及开发教程(一)MQTT协议概述
MQTT协议详解及开发教程(二)MQTT服务器EMQx搭建
MQTT协议详解及开发教程(三)MQTT Client工具软件选择及简单测试
MQTT协议详解及开发教程(四)MQTT协议报文格式
MQTT协议详解及开发教程(五)CONNECT/CONNACK报文分析
前言
在上一篇文章中,我们对CONNECT和CONNECT的报文进行了分析,本文接着介绍PUBLISH发布QoS0消息报文,该报文也是我们在开发中经常使用的报文。
1.PUBLISH发布QoS0报文示例
1.1 抓包数据
数据源码如下:
30 15 00 09 54 65 73 74 54 6f 70 69 63 30 31 32
33 34 35 36 37 38 39
1.2 固定报头
30 15
其中:
30 – 对应的控制报文类型为PUBLISH,重发标志DUP位0,QoS等级为0,
RETAIN标志位0
15 – 剩余长度0x15 = 21个字节
1.3 可变报头
00 09 54 65 73 74 54 6f 70 69 63
其中:
00 09 – 这里就是Topic Name的长度,共9个字节
54 65 73 74 54 6f 70 69 63 – Topic Name对应的ASCII码:TestTopic
1.4 有效载荷
30 31 32 33 34 35 36 37 38 39
其中,这里没有载荷的长度。
00 09 – 这里就是Topic Name的长度,共9个字节
30 31 32 33 34 35 36 37 38 39 --对应的ASCII码:0123456789
2.发布QoS 0消息的响应报文示例
MQTT协议中规定,PUBLISH报文的接收者必须按照根据PUBLISH报文中的QoS等级发送响应,下表描述了预期的响应规定
服务质量等级 | 预期响应 |
---|---|
QoS 0 | 无响应 |
QoS 1 | PUBACK报文 |
QoS 1 | PUBREC报文 |
注意:对于QoS 0类型的消息响应,协议规定可以无响应,但是并不是强制的,一般服务器接收到QoS 0类型的消息,都会按照原样返回,这对于Client其实是不影响的,因为客户端发送的Topic,一般都不会自己订阅,所以接收到没有订阅的Topic消息,不动作即可。
2.1 QoS 0 消息响应报文抓包
可以看到,接收到的响应与发送的是完全一致的,这里就不再赘述。