我用 Python 2.7 编写了 2 个程序。一个创建主机套接字,另一个创建客户端套接字。然后它们尝试连接。我的 PC 上有主机程序,而客户端程序则放在手机上,手机连接到与 PC 位于同一网络的 WIFI。我将客户端程序(在我的手机上,位于 LAN 上)设置为连接到 PC 的本地 IP 地址。我检查了代码中的缺陷,发现它是完美的。然而,当我尝试运行它时,我得到了一些非常奇怪的行为:
- 端口正确。主机名正确。我尝试连接。什么也没发生。没有建立连接。
- 我重置了我的 PC。
- 我再试一次。结果还是一样。
- 我关闭了本地和公共防火墙。
- 现在我得到了一些信息,但仅限于我的客户端设备:[Errno 111] 连接被拒绝。
- 我重新打开了防火墙。
- 与 1 中结果相同。(无连接)
- 我在笔记本电脑上运行主机程序。我尝试连接。成功了!
- 我重置了路由器,并再次在 PC 上运行主机程序。结果与 1 相同。
- 我现在也在电脑上运行客户端程序,并将其连接到“localhost”。它工作正常。
我按照 10 的步骤操作,设置客户端程序以再次连接到我的 PC 本地 IP 地址。错误:
Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> s.connect(cn) File "C:\Python27\lib\socket.py", line 224, in meth return getattr(self._sock,name)(*args) error: [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
6. 我得出结论,问题与 PC 有关,并且我的程序运行正常。
一些情报:
- PC 和笔记本电脑上均安装有 Windows 7。
- 我正在使用 Python 2.7。
- 笔记本电脑和智能手机通过 WIFI 连接到网络,PC 通过电缆连接到网络。
- 我尝试了不同的端口以确保它们不是问题所在。
可能不太相关,但这是主机和客户端的代码 http://pastebin.com/raw/wswMi5SV
到底是怎么回事?
答案1
我遇到过类似的问题。结果发现连接错了计算机。因此,连接显示远程连接被拒绝,但问题出在本地计算机上。
测试此情况的一种方法是关闭远程系统上的网络接口(或拔下网络电缆)。然后尝试连接。您应该会收到不同的错误消息(WSAETIMEDOUT)。如果您仍然收到 WSAECONNREFUSED 错误,则该错误来自网络上的其他设备。
在我的例子中,本地计算机上有两个网络接口,其中一个与远程设备具有相同的 IP 地址。因此,它试图重新连接到本地计算机。
答案2
您当前绑定的localhost
只是一个内部接口。绑定到的程序127.0.0.1
无法通过网络访问,这是设计使然。当您在防火墙关闭的情况下连接时收到“连接被拒绝”时,就会看到这种情况。当您发送TCP 同步到一个关闭的端口,操作系统将返回一个TCP 恢复返回给客户端以指示端口已关闭。
当您说绑定0.0.0.0
不起作用时,您可以更具体一点吗?它到底是如何失败的?
您可以尝试以下一件事:
server.bind(("", port))
如果我没记错的话,这将尝试绑定到所有可用接口。我不确定你之前尝试过什么,但这应该可以解决你的问题。