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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:19:52