Paho MQTT loop()与loop_forever()异常问题求助
Paho MQTT客户端循环监听失败,触发struct.unpack错误
问题详情
使用Paho MQTT客户端时,尝试通过loop_forever()、loop(time)、loop_start()+loop_stop()等方法持续监听MQTT消息,但循环无法正常启动,始终触发struct.error: unpack requires a string argument of length 2错误。
错误回溯
Traceback (most recent call last): File "mosquitto_actuator.py", line 41, in <module> mqttc.loop_forever() File "/usr/lib/python2.7/site-packages/paho_mqtt-1.6.1-py2.7.egg/paho/mqtt/client.py", line 1756, in loop_forever rc = self._loop(timeout) File "/usr/lib/python2.7/site-packages/paho_mqtt-1.6.1-py2.7.egg/paho/mqtt/client.py", line 1164, in _loop rc = self.loop_read() File "/usr/lib/python2.7/site-packages/paho_mqtt-1.6.1-py2.7.egg/paho/mqtt/client.py", line 1556, in loop_read rc = self._packet_read() File "/usr/lib/python2.7/site-packages/paho_mqtt-1.6.1-py2.7.egg/paho/mqtt/client.py", line 2439, in _packet_read rc = self._packet_handle() File "/usr/lib/python2.7/site-packages/paho_mqtt-1.6.1-py2.7.egg/paho/mqtt/client.py", line 3039, in _packet_handle return self._handle_connack() File "/usr/lib/python2.7/site-packages/paho_mqtt-1.6.1-py2.7.egg/paho/mqtt/client.py", line 3087, in _handle_connack (flags, result) = struct.unpack("!BB", self._in_packet['packet']) struct.error: unpack requires a string argument of length 2
客户端代码
# Import package import paho.mqtt.client as mqtt # Define Variables MQTT_HOST = "192.168.0.105" MQTT_PORT = 1883 MQTT_KEEPALIVE_INTERVAL = 45 MQTT_TOPIC = "Pose" # Define on connect event function # We shall subscribe to our Topic in this function def on_connect(mosq, obj, rc, properties=None): mqttc.subscribe(MQTT_TOPIC, 0) # Define on_message event function. # This function will be invoked every time, # a new message arrives for the subscribed topic def on_message(mosq, obj, msg, properties=None): print(str(msg.payload)) def on_subscribe(mosq, obj, mid, properties=None): print("Subscribed to topic: " + MQTT_TOPIC) # Initiate MQTT Client mqttc = mqtt.Client() # Assign event callbacks mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_subscribe = on_subscribe # Connect with MQTT Broker mqttc.connect(MQTT_HOST, MQTT_PORT) # Continue monitoring the incoming messages for subscribed topic mqttc.loop_forever()
Mosquitto Broker配置
autosave_interval 1800 connection_messages true log_timestamp true allow_anonymous true socket_domain ipv4 listener 1883
已尝试的排查动作
- 添加/移除
socket_domain ipv4配置项,问题未解决 - 更换多种循环监听方法,均触发相同错误
恳请帮忙排查问题原因及解决办法。
内容的提问来源于stack exchange,提问作者Sabbly
相关产品推荐
相关产品推荐

