【发布时间】:2016-02-14 16:12:03
【问题描述】:
我正在尝试编写两个简短的 python 脚本,将两台或多台机器相互连接,一台作为服务器,另一台作为客户端。在同一台计算机上测试客户端和服务器脚本时效果很好,但是当我从另一台计算机上尝试时,客户端一直超时;它无法连接到服务器。这是我的服务器代码:
import socket
server = socket.socket()
host = "computername"
port = 12345
server.bind((host, port))
server.listen(5)
client, addr = server.accept()
客户端代码:
import socket
server = socket.socket()
host = "computername"
port = 12345
server.connect((host, port))
任何关于为什么机器无法连接的线索?
【问题讨论】:
-
您是否尝试过禁用防火墙(在两台计算机上)?服务器上有public ip 吗?如果您将
python3 -mhttp.server --bind computername 12345作为服务器运行而python3 -c "from urllib.request import urlopen; print(urlopen('http://computer:12345').read().decode())"作为客户端运行会发生什么? -
@J.F. Sebastian 该代码是如何工作的?我不明白该怎么处理它。
-
将这些命令复制粘贴到相应计算机(首先是 http 服务器,然后是发出请求的客户端)上的命令行(终端、控制台)中。目的是找出问题是您的代码还是网络。如果请求成功,那么问题就是您的代码。如果请求失败,那么问题与您的 Python 代码无关,您应该先配置网络。
-
我从客户端收到一条错误消息,提示“没有名为 request 的模块”,而来自服务器的“没有名为 http 的模块”。
-
这意味着您使用 Python 2(edit 您的问题并提到您使用 Python 2)。注意
python3(我建议的命令末尾有3)。在 Python 2 上,您可以运行:python2 -mSimpleHTTPServer 12345作为服务器,python2 -c "from urllib2 import urlopen; print urlopen('http://computername:12345').read()"作为客户端。
标签: python sockets timeout serversocket