MQTT协议登录问题讲解
二、登录错误
在MQTT 3.1.1协议中,客户端与服务器之间的通信是通过一系列的控制报文进行的。
正常MQTT客户端登录服务器,服务器返回的是:0x20 0x02 0x00 0x00
这是服务器返回的CONNACK报文,表示连接确认。
比如:
0x20 0x02 0x00 0x05
0x20 0x02 0x00 0x04
等等。 最后的值是错误含义。
CONNACK报文结构
CONNACK报文由固定报头和可变报头组成,没有有效载荷。
-
固定报头:
-
第一个字节
0x20
表示CONNACK报文的类型和标志位。0x20
表示这是一个CONNACK报文,且标志位为0。
-
-
可变报头:
-
第二个字节
0x02
表示可变报头的长度,这里是2个字节。 -
第三个字节
0x00
是连接确认标志(Connect Acknowledge Flags),其中第7位是Session Present标志,表示服务器是否保存了客户端的会话状态。0x00
表示没有保存会话状态。 -
第四个字节
0x05
是连接返回码(Connect Return Code),表示连接的结果。0x05
表示连接被拒绝,原因是未授权(Not authorized)。
-
连接返回码(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)
问题分析
如果收到的返回码是0x05
表示连接被拒绝,原因是未授权。
原因:
-
提供的MQTT三元组(Client ID、Username、Password)不正确。
解决方法
检查MQTT三元组:确保Client ID、Username和Password正确无误。
- 点赞
- 收藏
- 关注作者
评论(0)