【问题标题】:Python 2.7 [Errno 113] No route to hostPython 2.7 [Errno 113] 没有路由到主机
【发布时间】:2016-12-28 01:51:15
【问题描述】:

我在同一个 LAN 上有 2 台计算机。第一台 PC 的 IP 地址为 192.168.178.30,另一台 PC 的 IP 地址为 192.168.178.26。 Ping、traceroute、telnet、ssh,两台电脑之间一切正常。两台 PC 运行相同的操作系统 - CentOS 7,并且两台 PC 具有相同的 python 版本 2.7.5(使用 python -V 命令检查)。

我从一本计算机网络书籍中复制了简单的 Python 代码。

client.py

from socket import *
serverName = '192.168.178.30'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName,serverPort))
sentence = raw_input('Input lowercase sentence: ')
clientSocket.send(sentence)
modifiedSentence = clientSocket.recv(1024)
print 'From Server:', modifiedSentence
clientSocket.close()

server.py

from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('192.168.178.30',serverPort))
serverSocket.listen(5)
print 'The server is ready to receive'
while 1:
       connectionSocket, addr = serverSocket.accept()
       sentence = connectionSocket.recv(1024)
       capitalizedSentence = sentence.upper()
       connectionSocket.send(capitalizedSentence)
       connectionSocket.close()

代码在同一台 PC 上运行时有效(服务器在 localhost 上侦听)。 当我在一台 PC 上运行客户端代码并在另一台 PC 上运行服务器代码时,我在客户端收到此错误。

Traceback (most recent call last):
  File "client.py", line 5, in <module>
    clientSocket.connect((serverName,serverPort))
  File "/usr/lib64/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 113] No route to host

有人可以帮忙吗?

【问题讨论】:

  • 您能否将两台机器的网络配置(ip addr)添加到您的问题中?这似乎更像是一个网络问题,而不是 Python API 的问题。

标签: python python-2.7 sockets


【解决方案1】:

检查防火墙(在服务器上)。

【讨论】:

  • @ThePraetor:你刚刚删除了对这个答案的评论吗?如果禁用防火墙有效,我实际上会很好奇你在哪里禁用它,因为当它是服务器防火墙时,我在关于“没有路由到主机”消息的其他评论中显然是错误的。
  • 我添加了一个答案。误删了我的评论:(。
【解决方案2】:

我按照 Messa 的建议停止了防火墙,现在它可以工作了。

service firewalld stop

我还是不明白问题出在哪里。我什至尝试使用不同的发行版。是否所有发行版都有严格的防火墙之类的。例如 Ubuntu 到 Ubuntu,Ubuntu 到 CentOS,CentOS 到 Ubuntu 我仍然遇到同样的问题(错误)。

【讨论】:

  • 我在 Mac 上,如果我运行 service,我会得到 -bash: service: command not found。我该怎么办?我知道这可以在 Linux 上运行,但几天前我切换到了 macOS。你能帮忙吗?
【解决方案3】:

您应该将服务器套接字bind'0.0.0.0',而不是'192.168.178.30'

【讨论】:

  • 虽然值得一试,但也应该可以只绑定到特定的 LAN IP。
  • 刚刚测试过了。还是同样的错误。无论如何,我认为它应该适用于 192.168.178.30。
  • 是的,实际上如果是监听部分会导致问题,错误将类似于“连接被拒绝”,与下一个解决方案中提到的防火墙相同。 “没有到主机的路由”意味着程序甚至无法确定它应该将消息发送到哪个设备,而不是接收设备不会接受连接。
  • 我通常将socket('', &lt;PORT&gt;) 绑定,但我遇到了同样的问题。所以我想也许你绑定的字符串并不重要。
【解决方案4】:
~]#supervisord
Error: No config file found at default paths (/usr/etc/supervisord.conf, /usr/supervisord.conf, supervisord.conf, etc/supervisord.conf, /etc/supervisord.conf); use the -c option to specify a config file at a different path
For help, use /usr/bin/supervisord -h

你应该使用 ln -s /etc/supervisor/supervisord.conf /usr/etc/supervisord.conf

【讨论】:

    【解决方案5】:

    这些东西都不适合我。我刚刚将两台设备都连接到同一个 WiFi 网络,我的程序就可以运行了!

    【讨论】:

      【解决方案6】:

      如果您尝试在同一网络上连接 2 台设备,您也可能会遇到同样的错误([Errno 113] No route to host)。可以通过仔细检查以确保两个设备都连接到 mqtt_client 或您正在使用的任何设备来修复该错误。连接设备后,我试图与一切正常通信。我还会检查以确保传递了正确的 IP_Address

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-09
        • 2020-05-10
        • 2013-01-12
        • 1970-01-01
        • 2019-03-08
        相关资源
        最近更新 更多