基于Python paho-mqtt的简易MQTT订阅脚本Linux正常但Windows 11失效
解决Windows 11上Paho MQTT脚本无法接收消息的问题
针对你遇到的问题,可通过以下调整让脚本在Windows 11正常工作:
具体修改方案
1. 替换localhost为127.0.0.1
Windows环境下localhost的DNS解析偶尔会出现异常,直接使用回环IP能避免这类问题,确保客户端稳定连接到本地MQTT broker。
2. 将订阅逻辑移至on_connect回调中
原代码在调用connect后立即执行订阅操作,此时连接可能还未完全建立。把订阅放到连接成功的回调函数里,能保证订阅时机准确,避免因连接未就绪导致的订阅失效。
3. 更新paho-mqtt到最新版本
旧版本的paho-mqtt客户端在Windows上可能存在兼容性bug,执行以下命令更新:
pip install --upgrade paho-mqtt
4. 增加日志输出(可选,用于排查)
添加日志能直观看到客户端的连接、订阅及消息接收状态,方便后续排查其他潜在问题。
修改后的完整脚本
import paho.mqtt.client as mqtt import logging # 配置日志输出 logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def on_connect(client, userdata, flags, rc): if rc == 0: logger.info("MQTT连接成功") # 连接成功后执行订阅 result, mid = client.subscribe('top', qos=2) if result == mqtt.MQTT_ERR_SUCCESS: logger.info(f"已订阅主题: top") else: logger.error(f"连接失败,错误码: {rc}") def onMQTT(client, userdata, message): logger.info(f"收到消息: {message.payload.decode('utf-8')}") print(message.payload) if __name__ == '__main__': client = mqtt.Client() # 设置连接回调 client.on_connect = on_connect client.message_callback_add('top', onMQTT) # 使用127.0.0.1替代localhost client.connect('127.0.0.1', 1883, keepalive=60) client.loop_forever()
内容的提问来源于stack exchange,提问作者Paul Jurczak
相关产品推荐
相关产品推荐

