首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不通过ip地址连接到mqtt代理的mqtt客户端

不通过ip地址连接到mqtt代理的mqtt客户端
EN

Stack Overflow用户
提问于 2022-05-25 07:42:39
回答 1查看 2.1K关注 0票数 0

我对mqtt协议很陌生。我很难将我的mqtt客户端(它连接到另一个网络)与我的mqtt代理连接到我的pc上,它有ip地址。

我的mqtt代理连接到我的家庭wifi,当我的客户连接到一个不同的家庭wifi。

我使用的是蚊帐经纪人,配置如下:

代码语言:javascript
复制
listener 1883 0.0.0.0
allow_anonymous true

Mqtt客户端代码:

代码语言:javascript
复制
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代理。

我遇到了这个错误:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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代理。

解释更多的内容是堆栈溢出的非主题,因为这是网络配置问题,而不是编程问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72373701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档