You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MQTT图片传输失败求助:已实现其他类型数据收发

MQTT图片传输接收端无响应问题修复

问题根源

  1. 回调注册顺序错误:订阅端先启动客户端循环、订阅主题,之后才绑定on_message回调函数,导致MQTT客户端无法识别消息处理逻辑,无法触发图片保存操作。
  2. 发布端存在冗余操作:每次循环重复读取图片文件,不必要消耗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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:35:21