Mosquitto Broker收到Puslish Message报文后,其Message Identifier为0时,Broker会断开TCP连接。
Mosquitto Broker日志:
1709176157: Sending SUBACK to abcd1234
1709176158: Client abcd1234 disconnected due to protocol error.
没有找到设置MQTTMessage结构体中id的语句,在paho_mqtt_publish函数中添加id自增动语句测试后,能正常发布消息,且不会再断开TCP。
在 https://mqtt.p2hp.com/mqtt311 2.3.1 包唯一标识中找到关闭唯一标识的描述:
SUBSCRIBE,UNSUBSCRIBE,PUBLISH(QoS > 0 的时候)控制包必须包含非零的唯一标识[MQTT-2.3.1-1]。每次客户端发送上述控制包的时候,必须分配一个未使用过的唯一标识[MQTT-2.3.1-2]。如果一个客户端重新发送一个特别的控制包,必须使用相同的唯一标识符。唯一标识会在客户端收到相应的确认包之后变为可用。例如PUBLIST在QoS1的时候对应PUBACK;在QoS2时对应PUBCOMP。对于SUBSCRIBE和UNSUBSCRIBE对应SUBACK和UNSUBACK[MQTT-2.3.1-3]。服务端发送QoS>0的PUBLISH时,上述内容同样适用。
网络正常,连接其他服务器也是正常的,就是连接了客户的服务器之后,不发布不接收订阅信息,它不会出现掉线,一旦发布消息,就跳出D/mqtt: net_read 0:1,然后就掉线重连了
客户端ID是唯一的