1、CONNACK确认收到连接请求
CONNACK确认收到连接请求包数据内容
CONNACK控制包 结构 | 固定包头 | 控制包类型 | CONNACK连接类型 | bit[7-4] 0x02<<4 |
特殊标识 | bit[3-0] 0x00 | |||
剩余长度 (Remaining Length) | 1字节 | 0x02 | ||
可变包头 | 连接确认标识 (Connect Acknowledge Flags)一个字节 | 0x00+SP1 | ||
连接返回码 (Connect Return code)一个字节 | 0x00 Connection Accepted | |||
0x01 Connection Refused, unacceptable protocol version | ||||
0x02 Connection Refused, identifier rejected | ||||
0x03 Connection Refused, Server unavailable | ||||
0x04 Connection Refused, bad user name or password | ||||
0x05 Connection Refused, not authorized | ||||
6-255 Reserved | ||||
载荷 | 无 |
2、说明:
如果服务端接受了一个SP1(Clean Session)设置为1的连接,服务端必须将CONNACK包中的Session Present设置为0,并且CONNACK包的返回码也设置为0。
如果服务端接受了一个Clean Session设置为0的连接,Session Present的值取决于服务端是否已经存储了客户端Id对应的会话状态。如果服务端已经存储了会话状态,CONNACK包中的Session Present必须设置为1。如果服务端没有存储会话状态,CONNACK包的Session Present必须设置为0。另外CONNACK包中的返回码必须设为0。
Session Present标识使得客户端能够建立连接,不论客户端和服务端在是否已经存储了会话状态上达成共识。
一旦会话的初始设置完成,存储会话状态的客户端会期望服务端也存储了会话状态。万一Session Present的值不符合预期,客户端可以选择是继续处理这个会话还是断开连接。客户端可以通过断开连接,把CleanSession设置为1重新连接,然后再断开连接,来决定客户端和服务端的会话状态。
3、数据调试
当网络调试助手服务器接收到了MQTTX客户端的连接请求后(CONNECT数据包),MQTT服务器返回CONNACK数据包,确认连接请求。下面编辑服务器返回的数据包,再通过网络调试助手给客户端发送该数据。
数据 | 说明 | |||||
CONNACK控制包 结构 | 固定包头 | 控制包类型 | CONNACK连接类型 | bit[7-4] 0x02<<4 | 0x20 | 确认收到连接请求包数据 |
特殊标识 | bit[3-0] 0x00 | |||||
剩余长度 (Remaining Length) | 1字节 | 0x02 | 0x02 | 剩余长度 2byte | ||
可变包头 | 连接确认标识 (Connect Acknowledge Flags)一个字节 | 0x00+SP1 | 0x00 | SP1为0 | ||
连接返回码 (Connect Return code)一个字节 | 0x00 Connection Accepted | 0x00 | Connection Accepted | |||
0x01 Connection Refused, unacceptable protocol version | ||||||
0x02 Connection Refused, identifier rejected | ||||||
0x03 Connection Refused, Server unavailable | ||||||
0x04 Connection Refused, bad user name or password | ||||||
0x05 Connection Refused, not authorized | ||||||
6-255 Reserved | ||||||
载荷 | 无 |
完整的数据:20 02 00 00
网络调试助手发送CONNACK数据包
MQTTX客户端收到CONNACK数据包后显示已连接