Python套接字无法连接。

6

我将在两台不同的Windows 7机器上通过Python 2.7中的套接字(Socket)运行服务器和客户端,并使它们在同一网络中运行。首先,我只是想让它们连接成功,然后再尝试进行其他操作。

目前我的服务器代码如下:

import socket    

host = '0.0.0.0' #Also tried '', 'localhost', gethostname()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, 12345))
s.listen(5)
cs, addr = s.accept()


print "Connected."

我的客户是:

import socket

host =  '127.0.0.1' #Also tried 'localhost', gethostname()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(host, 12345)

print "Connected."

我得到的错误是:
socket.error: [Errno 10061] No connection could be made because the target machine actively refused it. 

我查看了很多其他问题,但没有一个答案能解决我的问题。非常感谢您的帮助。

当我将服务器的IP地址(10.0.63.40)用作客户端的主机时,出现了以下情况:

[Errno 10060] A connection attempt failed because the connected party did not properly 
respond after a period of time, or established connection failed because connected host has 
failed to respond

3
你是否有防火墙阻止了连接?端口是否打开? - Zach Gates
你是否拥有高级权限运行。我曾遇到过这种情况,当时我没有管理员访问权限。这在许多语言和程序中都是正确的。事实上,唯一没有拒绝套接字的语言是 Ruby。 - James Parsons
你的主机的IP地址是什么? - matcheek
我没有防火墙阻止它,端口是开放的。服务器的IP地址是10.0.63.40,客户端的IP地址是10.0.63.141。我不确定如何检查是否使用提升的权限运行。 - Kieran
2个回答

10

您说这是两台独立的机器。您无法通过连接到127.0.0.1localhost从一台机器访问另一台机器。

0.0.0.0上进行侦听是没有问题的,这意味着侦听套接字可以从所有接口(包括本地网络)访问。

但是,为了连接到服务器,您显然需要使用本地网络中服务器机器的IP地址(如果您已经正确设置了本地名称服务器,则使用主机名)。

根据您的评论,服务器机器的本地IP地址为10.0.63.40。这意味着您应该调用s.connect("10.0.63.40", 12345)


1
您现在显示的错误表明存在防火墙问题。主机似乎无法从端口12345外部访问。由于这是Windows系统,您需要控制自定义防火墙应用程序或Windows防火墙。两者都可以暂时禁用,以便更轻松地调试问题。 - Dr. Jan-Philip Gehrcke
啊,原来我把错误的网络防火墙禁用了。现在防火墙关闭后一切都正常运行了。对此我很抱歉,谢谢。 - Kieran

-1

当我尝试将客户端代码与服务器端连接时,我遇到了同样的问题。通过使用以下命令解决了这个问题:

socket.gethostbyname(socket.gethostname()) 

注:[我在本地运行它,而不是上传到实际服务器上]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接