MQTT 问题:代理在我发送连接数据包时关闭连接

MQTT ISSUE: Broker closing connection as i send connect packet

这是我第一次 post 来这里。如果我错了请纠正我

我正在使用带有 G620 模块的 free scale 控制器连接到服务器。 我开始实现MQTT客户端了。

通过UART与G620 GPRS模块通信。 通过 AT 命令,我连接到 MQTTbroker。 我一发送连接数据包,代理就关闭连接。 需要帮助或建议。

连接数据包是:{ 0x10,0x12,0x00,0x04,M,Q,T,T,0x04,0x00,0x3C,0x00,0x00,0x06,Z,1,2,1,2,3 }

根据 MQTT 协议,服务器会在两种情况下断开您的连接。
1.如果你违反协议格式
2.如果超过连接超时

违反协议终止的原因:
- 您可能错误地构建了一些协议字节。使用协议 document.
进行交叉验证 - 您可能已经连接并尝试再次连接。如果您有权访问,请检查服务器端日志。
- 当您通过 UART 发送帧时,您可能使用了 for 循环来发送字节。如果 for 循环计数器基于 "strlen(Connectpacket)",您将无法获得准确的计数,因为 "strlen" 将在 0x00 之后终止。所以服务器将收到半个数据包并断开你的连接。

您的协议似乎无效,
0x10 - MQTT 控制数据包类型
0x12 - 剩余长度
0x00 - 长度 MSB
0x04 - 长度 LSB
米 问 吨 T - 协议名称
0x04 - 协议级别
0x00 - 连接标志
0x3C - 保持活动状态 MSB
0x00 - 保持有效 LSB
0x00,0x06,Z,1,2,1,2,3 - 这些字节有什么用?与协议文档交叉验证。

将清洁会话位设置为 1。将 keep alive 设置为 0x00 MSB 0x3C LSB。