MQTT图片传输失败求助:已实现其他类型数据收发
MQTT图片传输接收端无响应问题修复
问题根源
- 回调注册顺序错误:订阅端先启动客户端循环、订阅主题,之后才绑定
on_message回调函数,导致MQTT客户端无法识别消息处理逻辑,无法触发图片保存操作。 - 发布端存在冗余操作:每次循环重复读取图片文件,不必要消耗IO资源。
修复后的代码
发布端(优化版)
import paho.mqtt.client as mqtt import time import base64 mqttBroker = "test.mosquitto.org" client = mqtt.Client("Temperature_Inside") client.connect(mqttBroker) # 仅读取一次图片,避免重复IO操作 with open("car.jpg", "rb") as image: img = image.read() base64_bytes = base64.b64encode(img) base64_message = base64_bytes.decode('ascii') while True: client.publish("TEMPERATURE", base64_message) print("Just published to topic TEMPERATURE") time.sleep(1)
订阅端(修复回调顺序)
import paho.mqtt.client as mqtt import time import base64 mqttBroker = "test.mosquitto.org" client = mqtt.Client("Smartphone") # 先绑定消息回调函数 def on_message(client, userdata, message): msg = message.payload.decode("utf-8") img = msg.encode('ascii') final_msg = base64.b64decode(img) with open('received_image.jpg', 'wb') as f: f.write(final_msg) print("Received and saved image successfully") client.on_message = on_message client.connect(mqttBroker) client.subscribe("TEMPERATURE") # 最后启动客户端循环 client.loop_start() time.sleep(30) client.loop_stop()
额外说明
- 修复核心是调整订阅端代码顺序:先绑定回调,再连接Broker、订阅主题、启动循环,确保客户端启动时已注册消息处理逻辑。
- 发布端将图片读取移到循环外,减少重复文件读取的开销,不影响功能实现。
内容的提问来源于stack exchange,提问作者syed haseeb ahmad
相关产品推荐
相关产品推荐

