getaddrinfo失败socket.gaierror [11001](python)(mqtt)

问题描述:

我创建了一个通过MQTT发布消息的android应用程序。我正在创建一个Python程序来接收命令。但是,当我运行它时,我总是遇到一个错误。getaddrinfo失败socket.gaierror [11001](python)(mqtt)

Traceback (most recent call last): 
File "mqttapptest.py", line 13, in <module> 
client.connect(MQTTHOST) 
File "E:\Anaconda\lib\site-packages\paho\mqtt\client.py", line 686, in connect 
return self.reconnect() 
File "E:\Anaconda\lib\site-packages\paho\mqtt\client.py", line 808, in reconnect 
sock = socket.create_connection((self._host, self._port), source_address=(self._bind_address, 0)) 
File "E:\Anaconda\lib\socket.py", line 693, in create_connection 
for res in getaddrinfo(host, port, 0, SOCK_STREAM): 
File "E:\Anaconda\lib\socket.py", line 732, in getaddrinfo 
for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 
socket.gaierror: [Errno 11001] getaddrinfo failed 

我的源代码如下所示:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import paho.mqtt.client as mqtt 

MQTTHOST = "free.mqtt.shiguredo.jp" 
USERNAME = "<username>" 
PASSWORD = "<password>" 

client = mqtt.Client(protocol=mqtt.MQTTv311) 
client.username_pw_set(USERNAME, PASSWORD) 

client.connect(MQTTHOST) 

TOPIC = "[email protected]/#" 
client.subscribe(TOPIC) 

client.loop_forever() 

TOPIC = "[email protected]" 
client.publish(TOPIC, "message from python") 

import time 
time.sleep(0.05) 

我在做什么错?

+0

free.mqtt.shiguredo.jp不能解决我或者所以我怀疑@ Ipiner的答案是正确的。即使你有一个答案,你应该删除这个问题,如果你发布的密码确实是一个Github标记,或者甚至只是一个有效的密码 – hardillb

看起来你不能解析主机名。

>>> socket.getaddrinfo('reddit.com', 22) 
    [(<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('151.101.65.140', 22)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_DGRAM: 2>, 17, '', ('151.101.65.140', 22)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_RAW: 3>, 0, '', ('151.101.65.140', 22)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('151.101.129.140', 22)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_DGRAM: 2>, 17, '', ('151.101.129.140', 22)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_RAW: 3>, 0, '', ('151.101.129.140', 22)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('151.101.193.140', 22)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_DGRAM: 2>, 17, '', ('151.101.193.140', 22)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_RAW: 3>, 0, '', ('151.101.193.140', 22)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('151.101.1.140', 22)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_DGRAM: 2>, 17, '', ('151.101.1.140', 22)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_RAW: 3>, 0, '', ('151.101.1.140', 22))] 
>>> socket.getaddrinfo('free.mqtt.shiguredo.jp', 8080) 
    Traceback (most recent call last): 
     File "<stdin>", line 1, in <module> 
     File "/usr/lib/python3.5/socket.py", line 732, in getaddrinfo 
     for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 
    socket.gaierror: [Errno -2] Name or service not known 
>>> socket.gethostbyname('free.mqtt.shiguredo.jp') 
    Traceback (most recent call last): 
     File "<stdin>", line 1, in <module> 
    socket.gaierror: [Errno -2] Name or service not known 
>>> socket.gethostbyname('reddit.com') 
    '151.101.65.140' 

如果你有你要连接的服务器的IP地址,你可以尝试先使用它。

将您的主题从“harismuha123 @ github /#”更改为“harismuha123 @ github/whatever”并删除所有评论,因为符号“#”是mqtt协议的特殊字符。

+0

在带引号的字符串内'#'完全可以表示通配符主题。此外,评论对MQTT主题没有影响 – hardillb

+0

单引号或双引号? –