通过mqtt接收回应帧,通过程序判断回应帧字符串编码为UTF-8,但通过UTF-8编码进行解码时,解析结果会出现局部efbfbd情况,解析示例:01031401 1a00 efbfbd 0000 0000 0024 0163 efbfbd efbfbd 0000 00 efbfbd 00330e4d
010 是 connect 包,但是connect 包不是长这样子的。
完整的MQTT CONNECT包应该包含:
- 固定头
- 协议名(通常是 “MQTT”)
- 协议级别
- 连接标志
- 保持连接时间
- 客户端标识符等
比如:
10 11 00 04 4D 51 54 54 04 C2 00 3C 00 06 636C69656E744944
10
: MQTT CONNECT报文的固定头
1
表示报文类型(CONNECT)0
表示报文标志
11
: 剩余长度(17字节)00 04
: 协议名长度(4字节)4D 51 54 54
: 协议名 “MQTT”04
: 协议级别(MQTT 3.1.1)C2
: 连接标志
1
: 用户名标志1
: 密码标志0
: 遗嘱保留000
: 服务质量(QoS)1
: 遗嘱标志0
: 清除会话
00 3C
: 保持连接时间(60秒)00 06
: 客户端ID长度(6字节)636C69656E74494400
: 客户端ID “clientID”
这个示例包含了一个基本的MQTT连接报文,包括协议名、协议级别、连接标志和客户端ID.
你可以发一个完整的包来看看么?或者你直接 wireshark 抓包,他可以直接看 mqtt 的解析的。