mosquitto 代理在接收 MQTT 连接数据包时出错 (python)

mosquitto broker gives error when receiving MQTT connect packet (python)

我目前正在从事一个项目,我必须在其中实施 MQTT 客户端。

我不会列出实现 Connect 包的整个 class 的代码,因为它很长,但它在转换为字节时生成的消息是:

bytearray(b'\x10\x10\x00\x04MQTT\x05\x02\x00<\x00\x04digi')

我试过使用套接字发送数据包:

connect_package = ConnectPacket(60,"digi")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1',1883))
s.sendall(connect_package.pack())

connect_package.pack() returns前面提到的bytearray

然而,mosquitto 客户端响应如下:

1607186254: mosquitto version 2.0.0 starting
1607186254: Config loaded from .\mosquitto.conf. 
1607186254: Opening ipv4 listen socket on port 1883. 
1607186254: Opening ipv4 listen socket on port 1883. 
1607186254: mosquitto version 2.0.0 running 
1607186273: New connection from 127.0.0.1:58295 on port 1883.
1607186273: Client <unknown> disconnected due to protocol error. 

我尝试寻找解决方案,但没有找到与我的情况相似的东西。
我对 Python 比较陌生,所以欢迎任何批评,我是来学习的。

稍后编辑:
这是 Wireshark 中的捕获:https://imgur.com/gzY0of6
这是 class:https://pastebin.com/LuGTARE6

实际问题是我在构建我的包时没有包含“属性 长度”字节,因此代理将最后一个 \x00 读取为 属性 长度,然后它读取 \x04作为 Client_ID 长度的 MSB,因此它期望客户端的 ID 至少为 1124 字节(00000100 -> 0x04 01100100 -> 'd'),但我只提供了 4 个。 非常感谢 hardillb。