Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字:连接超时_Python_Sockets_Timeout_Serversocket - Fatal编程技术网

Python套接字:连接超时

Python套接字:连接超时,python,sockets,timeout,serversocket,Python,Sockets,Timeout,Serversocket,我正在尝试编写两个简短的python脚本,将两台或多台机器相互连接起来,一台作为服务器,另一台作为客户端。在同一台计算机上测试客户端和服务器脚本时,它工作得非常好,但当我在另一台计算机上尝试时,客户端一直超时;它无法连接到服务器。这是我的服务器代码: import socket server = socket.socket() host = "computername" port = 12345 server.bind((host, port)) server.listen(5) client

我正在尝试编写两个简短的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))

关于机器无法连接的原因有什么线索吗?

我认为,在不同的机器上运行客户端和服务器脚本时,您正在正确地更改主机变量。请尝试正确地更改该值或使用服务器计算机的IP地址。

我认为,在不同的计算机上运行客户端和服务器脚本时,您正在正确地更改主机变量。请尝试正确更改该地址/或使用服务器计算机的IP地址。

防火墙可能会禁止通信

要排除与DNS相关的问题,请尝试IPs而不是主机名:

# server: listen on all interfaces
server.bind(('', port))
以及:


当然,使用真实的IP地址。

防火墙可能会禁止通信

要排除与DNS相关的问题,请尝试IPs而不是主机名:

# server: listen on all interfaces
server.bind(('', port))
以及:



当然是一个真实的IP地址。

否,主机变量是相同的;这是我电脑的名字。我将尝试使用IP地址。不,主机变量相同;这是我电脑的名字。我将尝试使用IP地址。使用IP地址并不能“解决”问题。我还在计时。我将尝试其他一些事情,比如验证IP地址,但在这一点上我做不了多少。我的代码应该可以工作,对吗?@I.A.S.在这种情况下,最可能的解释是服务器上有一个防火墙。它是防火墙的一个特定部分还是整个东西?我禁用了防火墙,但连接仍然超时。这是否与客户可能是Macbook有关?我有点绝望了。很难猜测远程网络上发生了什么。我会阅读日志,并可能使用tcpdump查看tcp端口12345上的流量。但这是离题讨论。我看你的代码中没有错误,但是只显示了连接建立部分。使用IP地址并没有“解决”问题。我还在计时。我将尝试其他一些事情,比如验证IP地址,但在这一点上我做不了多少。我的代码应该可以工作,对吗?@I.A.S.在这种情况下,最可能的解释是服务器上有一个防火墙。它是防火墙的一个特定部分还是整个东西?我禁用了防火墙,但连接仍然超时。这是否与客户可能是Macbook有关?我有点绝望了。很难猜测远程网络上发生了什么。我会阅读日志,并可能使用tcpdump查看tcp端口12345上的流量。但这是离题讨论。我发现您的代码中没有错误,但是只显示了连接建立部分。您是否尝试禁用防火墙(在两台计算机上)?您在服务器上有一个服务器吗?如果运行
python3-mhttp.server--bind computername 12345
作为服务器,并从urllib.request导入urlopen;print(urlopen)运行
python3-c”,会发生什么情况http://computer:12345').read().decode())“
作为客户机?@J.F.Sebastian这段代码是如何工作的?我不明白该怎么办。将这些命令复制粘贴到相应计算机(首先是http服务器,然后是发出请求的客户端)上的命令行(终端、控制台)中。目的是查明问题是您的代码还是网络。如果请求成功,那么问题是您的代码。如果请求失败,那么问题与您的Python代码无关,您应该首先配置网络。我从客户端收到一个错误,说“没有名为request的模块”,从服务器收到一个错误,说“没有名为http的模块”。这意味着您使用Python 2(您的问题和您提到的使用Python 2)。注意
python3
(我建议的命令末尾有
3
)。在Python 2上,您可以运行:
python2-mSimpleHTTPServer 12345
作为服务器,并从urllib2导入urlopen;打印urlopen(
python2-c”)http://computername:12345“).read()”
作为客户端。您是否尝试禁用防火墙(在两台计算机上)?您在服务器上有一个服务器吗?如果运行
python3-mhttp.server--bind computername 12345
作为服务器,并从urllib.request导入urlopen;print(urlopen)运行
python3-c”,会发生什么情况http://computer:12345').read().decode())“
作为客户机?@J.F.Sebastian这段代码是如何工作的?我不明白该怎么办。将这些命令复制粘贴到相应计算机(首先是http服务器,然后是发出请求的客户端)上的命令行(终端、控制台)中。目的是查明问题是您的代码还是网络。如果请求成功,那么问题是您的代码。如果请求失败,那么问题与您的Python代码无关,您应该首先配置网络。我从客户端收到一个错误,说“没有名为request的模块”,从服务器收到一个错误,说“没有名为http的模块”。这意味着您使用Python 2(您的问题和您提到的使用Python 2)。注意
python3
(我建议的命令末尾有
3
)。在Python 2上,您可以运行:
python2-mSimpleHTTPServer 12345
作为服务器,并从urllib2导入urlopen;打印urlopen(
python2-c”)http://computername:12345“).read()”
作为客户端。