mqtt协议详解(代码示例)
本文链接:https://blog.csdn.net/tigerots/article/details/103201877
固定头(一般只有2字节): 命令标志1B + 剩余总长度1-4B(可变头+负载)
可变头: 不同命令, 不同长度
负载内容: 可以没有, 传输过程中均为十六进制编码两字接的长度是高字节在前低字节在后 比如: 8字节 = 00 08
1. CONNECT – 连接服务端
固定包头 + 可变包头:
10 + 剩余总长度1B + 长度2B + 协议名4B + 协议版本1B + 连接标志1B + 保持连接时间2B
10 ?? 00 04 ‘M’‘Q’‘T’‘T’ 04 C2 00 FF
10 ?? 00 04 4D 51 54 54 04 C2 00 FF
清理会话 Clean Session = 1, 不清理
10 ?? 00 04 4D 51 54 54 04 C0 00 FF
Clean Session = 0
有效负载:
客户端ID长度(2B) + 客户端ID + 用户名长度(2B) + 用户名 + 密码长度(2B) + 密码
2. CONNACK – 确认连接请求
20 02 01 00 清理会话 Clean Session = 1, 与命令相对应
20 02 00 00 Clean Session = 0
3. PUBLISH – 发布消息
Qos:0, DUP一直为0, RETAIN =0不使用保留报文(服务器压力大)
30 + 剩余总长度1B + 主题长度2B + 主题 (+ 报文标识符2B Qos=0时没有) + 报文内容
30 0E 00 09 ‘k’ ‘f’ ‘b’ ‘_’ ‘t’ ‘o’ ‘p’ ‘i’ ‘c’ + ‘1’ ‘2’ ‘3’
30 0E 00 09 6B 66 62 5F 74 6F 70 69 63 31 32 33
4. PUBACK –发布确认
40 02 报文标识符2B
5. PUBREC – 发布收到(QoS 2,第一步)
6. PUBREL – 发布释放(QoS 2,第二步)
7. PUBCOMP – 发布完成(QoS 2,第三步)
8. SUBSCRIBE - 订阅主题
82 + 剩余总长度1B + 报文标识符2B + 主题过滤器长度2B + 主题过滤器内容nB + Qos等级1B
(消息编号的订阅与应答是一一对应的, 下同)
82 0E 00 0A 00 09 61 70 70 5F 74 6F 70 69 63 00
等级0
82 0E 00 0A 00 09 61 70 70 5F 74 6F 70 69 63 01
等级1
9. SUBACK – 订阅确认
90 + 剩余总长度1B + 消息编号2B + Qos等级1B
90 03 00 0A 00
等级0
90 03 00 0A 01
等级1
10. UNSUBSCRIBE –取消订阅
A2 + 剩余总长度1B + 消息编号2B + 长度2B + 内容nB
A2 0D 00 0A 00 09 61 70 70 5F 74 6F 70 69 63
11. UNSUBACK – 取消订阅确认
B0 + 剩余总长度1B + 消息编号2B
B0 02 00 0A
12. PINGREQ – 心跳请求
C0 00
13. PINGRESP – 心跳响应
D0 00
14. DISCONNECT –断开连接
E0 00