You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

多MQTT客户端连接test.mosquitto.org时遭遇ConnectionRefusedError的问题求助

多MQTT客户端连接test.mosquitto.org时遭遇ConnectionRefusedError的问题求助

大家好,我是完全刚接触MQTT协议、Python和paho-mqtt库的新手。我现在想要实现的是两个发布者向同一个主题发送消息,同时一个订阅者监听该主题的所有消息。之前运行订阅者和第一个发布者的时候一切正常,但启动第二个发布者时,就遇到了连接被拒绝的错误,具体报错信息如下:

Traceback (most recent call last):
File "C:\...\MQTT\DigitalTwin2.py", line 14, in <module>
dt_client.connect("test.mosquitto.org", 1883, 60)
File "C:\...\Python\Python39\lib\site-packages\paho\mqtt\client.py", line 914, in connect
return self.reconnect()
File "C:\...\Python\Python39\lib\site-packages\paho\mqtt\client.py", line 1044, in reconnect
sock = self._create_socket_connection()
File "C:\...\Python\Python39\lib\site-packages\paho\mqtt\client.py", line 3685, in _create_socket_connection
return socket.create_connection(addr, timeout=self._connect_timeout, source_address=source)
File "C:\...\Python\Python39\lib\socket.py", line 843, in create_connection
raise err
File "C:\...\Python\Python39\lib\socket.py", line 831, in create_connection
sock.connect(sa)
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

我的Python代码如下:
两个发布者的代码几乎完全一致,只有客户端名称不同,以下是发布者的通用代码:

import paho.mqtt.client as mqtt
from random import uniform
import time

def on_dt_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connected to Digital Twin-1 with result code 0")
    else:
        print("Connection to Digital Twin-1 failed with result code " + str(rc))

dt_client = mqtt.Client("Digital Twin-1")  # 第二个发布者这里是"Digital Twin-2"
dt_client.on_connect = on_dt_connect
dt_client.connect("test.mosquitto.org", 1883, 60)

while True:
    randNumber = uniform(3.0, 4.0)
    randNumber = round(randNumber, 4)
    dt_client.publish("topic", "Digital Twin-1: " + str(randNumber))  # 第二个发布者这里对应改成Digital Twin-2
    print("..." + str(randNumber) + "...")
    time.sleep(1)

订阅者代码:

import paho.mqtt.client as mqtt
import time

def on_sd_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connected to Smart Device with result code 0")
    else:
        print("Connection to Smart Device failed with result code " + str(rc))

def on_sd_message(client, userdata, message):
    print("...", str(message.payload.decode("utf-8")))

device_client = mqtt.Client("Smart Device")
device_client.on_connect = on_sd_connect
device_client.connect("test.mosquitto.org", 1883, 60)

device_client.loop_start()
device_client.subscribe("topic")
device_client.on_message = on_sd_message

time.sleep(30)
device_client.loop_stop()

我已经查过一些相关问题,但没找到针对三个客户端同时连接场景的解决方案,另外我之前还做过这些操作:

  • 在Windows Defender里添加了新的规则
  • 使用MQTT Explorer时设置过密码,后来用密码连不上就关掉了软件,还删掉了mosquitto文件夹里的密码文件
  • 整个流程是跟着YouTube视频学习操作的

希望大家能帮我看看问题出在哪里,谢谢!

备注:内容来源于stack exchange,提问作者Betül Azakoğlu

火山引擎 最新活动