系列文章目录
前言
上一章中介绍了MQTT控制包的组成,这一章将详细介绍MQTT中CONNECT控制包。CONNECT(客户端请求连接服务端)
当客户端与服务端建立网络连接(TCP/UDP连接等)后,第一个从客户端发送给服务端的包必须是CONNECT包。并且每次网络连接时,客户端只能发送一次CONNECT包。若客户端在一次连接中,发送多次CONNECT包。服务端将会把接收到的第二个CONNECT包当做违反协议处理,同时会立即断开与客户端的连接。
在上一章载荷部分有提到CONNECT包中是必须包含载荷。其有效载荷包含客户端标识符、主题、消息、用户名、密码。其中客户端标识符是必须含有的,其他都是可选项。它们的存在是根据可变包头中的连接标识确定的。
一、固定包头(2字节)
剩余长度是指可变包头长度(10字节)加上载荷的长度。计算方式请见第二章中剩余长度部分。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
byte1 | 控制包类型 | 保留 | ||||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | |
byte2 | 剩余长度 |
二、可变包头(10字节)
CONNECT包的可变包头由四个字段按照如下顺序构成:协议名字(6字节),协议等级(1字节),连接标识(1字节),保持连接(2字节)
协议名字(6字节)
协议名称为大写的字符串"MQTT",当服务端检测到协议名称不正确时,会立即断开与客户端的连接。所以请注意 1.大写的、2.字符串、3."MQTT"
协议名称 | |||||||||
</ |