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

使用Paho MQTT客户端通过Mosquitto传输文件失败问题求助

MQTT文件传输故障排查与修复

问题分析

你的代码存在两个关键问题,导致文件无法正常传输:

  1. 发布端未等待连接与消息发送完成:Paho MQTT的connect()是异步非阻塞方法,直接调用publish后立即disconnect,会导致消息还未发送就断开连接,代理根本没收到消息。
  2. 接收端存在错误冗余代码:接收端里的client.publish(topic, message, retain=True)完全多余,且message变量未定义,会触发NameError,导致接收端无法正常运行。

修正后的发布端代码

import paho.mqtt.client as mqtt

# 代理配置
broker_address = "127.0.0.1"
port = 1883
topic = "test"
keep_alive_time = 18 * 60 * 60
file_path = "D:/FSP/OTA//ftpserverpython/public/u2a16_startup.mot"

# 读取文件二进制内容
with open(file_path, 'rb') as file:
    message = file.read()

client = mqtt.Client()

# 连接成功回调(可选,用于确认连接状态)
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("已成功连接到MQTT代理")
    else:
        print(f"连接失败,错误码:{rc}")

client.on_connect = on_connect

# 连接代理并启动后台网络事件循环
client.connect(broker_address, port, keep_alive_time)
client.loop_start()

# 发布消息,设置QoS=1确保消息送达,等待发布完成
publish_result = client.publish(topic, message, qos=1, retain=True)
publish_result.wait_for_publish()

# 停止循环并断开连接
client.loop_stop()
client.disconnect()

print("二进制文件已成功发布")

修正后的接收端代码

import paho.mqtt.client as mqtt

# 代理配置
broker_address = "127.0.0.1"
port = 1883
topic = "test"
keep_alive_time = 18 * 60 * 60
output_file_path = "D:/FSP/OTA/mqttclient//file/b.mot"

# 消息接收回调
def on_message(client, userdata, message):
    with open(output_file_path, 'wb') as file:
        file.write(message.payload)
    print(f"文件已保存至:{output_file_path}")

client = mqtt.Client()

# 先设置消息回调,再连接代理
client.on_message = on_message
client.connect(broker_address, port, keep_alive_time)

# 订阅主题
client.subscribe(topic)

print("等待接收文件...")
# 启动永久循环处理网络事件
client.loop_forever()

额外注意事项

  • 如果文件大小超过1MB,需要修改Mosquitto配置文件(mosquitto.conf),添加message_size_limit 10485760(以10MB为例),并重启代理。
  • 使用QoS=1或QoS=2可以提升大文件传输的可靠性,避免丢包。
  • 确保接收端的输出目录(D:/FSP/OTA/mqttclient//file/)已存在,否则会触发文件写入错误。

内容的提问来源于stack exchange,提问作者Tất Đạt Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:42:03