我对mqtt协议很陌生。我很难将我的mqtt客户端(它连接到另一个网络)与我的mqtt代理连接到我的pc上,它有ip地址。
我的mqtt代理连接到我的家庭wifi,当我的客户连接到一个不同的家庭wifi。
我使用的是蚊帐经纪人,配置如下:
listener 1883 0.0.0.0
allow_anonymous trueMqtt客户端代码:
import paho.mqtt.client as mqtt
from random import randrange, uniform
import time
broker = "10.18.124.166"
port = 1883
client = mqtt.Client("iot gateway 1")
client.connect(broker, port)
while True:
num = uniform(1,10)
client.publish("Iotgateway/MFMmeter", num)
print("just published" + str(num) + " to" + str(broker) + "on topic EdgeGrid/Iotgateway/MFMmeter")
time.sleep(1)在上面的代码im中,创建一个随机数,im试图将它发送给mqtt代理。
我遇到了这个错误:
Traceback (most recent call last):
File "testing1.py", line 8, in <module>
client.connect(broker, port)
File "C:\Users\Rohit\AppData\Local\Programs\Python\Python38-32\lib\site-packages\paho\mqtt\client.py", line 914, in connect
return self.reconnect()
File "C:\Users\Rohit\AppData\Local\Programs\Python\Python38-32\lib\site-packages\paho\mqtt\client.py", line 1044, in reconnect
sock = self._create_socket_connection()
File "C:\Users\Rohit\AppData\Local\Programs\Python\Python38-32\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:\Users\Rohit\AppData\Local\Programs\Python\Python38-32\lib\socket.py", line 808, in create_connection
raise err
File "C:\Users\Rohit\AppData\Local\Programs\Python\Python38-32\lib\socket.py", line 796, in create_connection
sock.connect(sa)
socket.timeout: timed out发布于 2022-05-25 09:30:06
,我的mqtt代理连接到我的家庭wifi,当我的客户连接到一个不同的家庭wifi。
这通常意味着客户端和代理都在所谓的NAT (网络地址转换)网关(这将是家庭网络路由器)的背后。两个家庭网络都将使用从RFC1918到不能通过因特网路由的地址范围,为了解决这个问题,路由器将所有传出通信量映射到ISP分配给路由器的单个公共IP地址(假设这里没有运营商级NAT )。
大多数is动态地将此公共IP地址分配给路由器,这意味着每次重新启动路由器时它都可以更改。
为了在您的家庭网络上运行MQTT代理,需要在公共IP地址上找到它。这可以通过使用分配给您的路由器的ISP的公共IP地址和启用所谓的端口转发来实现。问题是,如果这个地址一直在变化,那么它就不能被使用(因为每次它更改时,您都必须更新每个想要连接的客户端)。有一些解决方案(例如,动态DNS)可以将主机名映射到更改的IP地址。
考虑到所有这些,我建议您不要尝试在家中托管MQTT代理,直到您更好地了解家庭互联网连接是如何工作的,并考虑使用一个公共测试MQTT代理来测试或考虑在云提供商上托管MQTT代理。
解释更多的内容是堆栈溢出的非主题,因为这是网络配置问题,而不是编程问题。
https://stackoverflow.com/questions/72373701
复制相似问题