MQTT ISSUE:当我发送连接数据包时,代理关闭连接

时间:2016-06-14 11:28:14

标签: c mqtt gprs

这是我在这里的第一篇文章。如果我错了,请纠正我

我正在使用带有G620模块的自由秤控制器来连接服务器。 我开始实现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 }

1 个答案:

答案 0 :(得分:0)

服务器根据MQTT协议断开连接有两种情况 1.如果您违反协议格式
2.如果超过连接超时

终止违反协议的原因:
- 您可能错误地设置了一些协议字节。与协议document交叉验证 - 您可能已经连接并尝试再次连接。如果您有权访问,请检查服务器端日志 - 当您通过UART发送帧时,您可能使用了for循环来发送字节。如果for循环计数器来自“strlen(Connectpacket)”,则不会得到确切的计数,因为“strlen”将在0x00之后终止。因此服务器将收到一半数据包并断开您的违规行为。

您的协议似乎无效,
0x10 - MQTT控制包类型
0x12 - 剩余长度
0x00 - 长度MSB
0x04 - 长度LSB
中号 Q Ť T - 协议名称
0x04 - 协议级别
0x00 - 连接标志
0x3C - 保持活着MSB
0x00 - 保持活着LSB
0x00,0x06,Z,1,2,1,2,3 - 有多少字节用于?与协议文件交叉验证。

将干净的会话位设置为1.为0x00 MSB 0x3C LSB设置保持活动状态。