Python MQTT paho客户端连接超时错误
我正在笔记本电脑上运行MQTT MOSQUITO代理。然后我尝试将两个Paho MQTT客户端连接到它:1)使用Java Paho从Android手机连接到它,2)使用Python Paho从Raspberry Pi连接到它 从Android连接是完美的。没问题 然而,覆盆子由于某种原因无法连接。相反,client.connect方法会阻塞,一段时间后,我会收到以下消息:Python MQTT paho客户端连接超时错误,python,raspberry-pi,mqtt,Python,Raspberry Pi,Mqtt,我正在笔记本电脑上运行MQTT MOSQUITO代理。然后我尝试将两个Paho MQTT客户端连接到它:1)使用Java Paho从Android手机连接到它,2)使用Python Paho从Raspberry Pi连接到它 从Android连接是完美的。没问题 然而,覆盆子由于某种原因无法连接。相反,client.connect方法会阻塞,一段时间后,我会收到以下消息: Traceback (most recent call last): File "sensorsClient.py",
Traceback (most recent call last):
File "sensorsClient.py", line 28, in <module>
client.connect(mqttServer, 1883)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 700, in connect
return self.reconnect()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 822, in reconnect
sock = socket.create_connection((self._host, self._port), source_address=(self._bind_address, 0))
File "/usr/lib/python2.7/socket.py", line 571, in create_connection
raise err
socket.error: [Errno 110] Connection timed out
一切都是通过WIFI在一个网络内完成的。没有移动数据。有人能解释一下为什么会发生这种情况吗?您可以运行的第一个检查是检查您的代理配置(如果是您自己的代理,请向您的供应商索要凭据),然后查看您是否为连接设置了用户名/密码。很可能这就是客户端连接超时的问题 如果是这种情况,您只需要在客户端配置中设置用户名/密码,如:
client.username\u pw\u set(“代理上的用户名”、“代理上的密码”)
我还建议使用urlparse.urlparse(“代理url”)
对代理url进行清理/标准化
如果这对您没有帮助,请务必联系我们。您是否可以包含应用程序的其余代码,以便我们可以查看所有代码。您是否检查过可以从pi ping笔记本电脑,并且
mqttServer
变量是正确的主机名/ip地址(没有额外的空格)@hardillb我可以用笔记本电脑ping。mqttServer是一个IP为标准“xxx.zzz.qqq.ttt”格式的字符串(多次检查)。不会发布,因为隐私:)我问你是否可以用另一种方式ping,从Pi到笔记本电脑。另外,请添加代码的其余部分,如果需要,您可以替换IP地址(但假设它是192.168.x.x或10.x.x.x地址,则只能从您的本地网络访问)@hardillb我可以在两个方向ping所有的东西都在同一个网络上,还是手机通过公共IP地址从“外部”通过手机网络访问代理?
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("$SYS/#")
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
mqttServer = 'zzz.xxx.ccc.qqq' # Public IP of the laptop
client = mqtt.Client("", True, None, mqtt.MQTTv31)
client.on_connect = on_connect
client.on_message = on_message
client.connect(mqttServer, 1883)
client.loop_start()