MQTT协议登录问题讲解

举报
DS小龙哥 发表于 2025/03/30 19:29:08 2025/03/30
【摘要】 一、前言二、登录错误在MQTT 3.1.1协议中,客户端与服务器之间的通信是通过一系列的控制报文进行的。正常MQTT客户端登录服务器,服务器返回的是:0x20 0x02 0x00 0x00 这是服务器返回的CONNACK报文,表示连接确认。如果出现问题:比如: 0x20 0x02 0x00 0x05 0x20 0x02 0x00 0x04 等等。 最后的值是错误含义。CONNACK报文结构C...

一、前言



二、登录错误

在MQTT 3.1.1协议中,客户端与服务器之间的通信是通过一系列的控制报文进行的。

正常MQTT客户端登录服务器,服务器返回的是:0x20 0x02 0x00 0x00 这是服务器返回的CONNACK报文,表示连接确认。


如果出现问题:

比如:

0x20 0x02 0x00 0x05

0x20 0x02 0x00 0x04 等等。 最后的值是错误含义。


CONNACK报文结构

CONNACK报文由固定报头和可变报头组成,没有有效载荷。

  1. 固定报头

    • 第一个字节0x20表示CONNACK报文的类型和标志位。0x20表示这是一个CONNACK报文,且标志位为0。

  2. 可变报头

    • 第二个字节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正确无误。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。