奇怪的套接字行为(一台计算机 - 我的笔记本电脑 - 可以接受与我的服务器的连接,而另一台 - 我的电脑 - 则不会)

奇怪的套接字行为(一台计算机 - 我的笔记本电脑 - 可以接受与我的服务器的连接,而另一台 - 我的电脑 - 则不会)

我用 Python 2.7 编写了 2 个程序。一个创建主机套接字,另一个创建客户端套接字。然后它们尝试连接。我的 PC 上有主机程序,而客户端程序则放在手机上,手机连接到与 PC 位于同一网络的 WIFI。我将客户端程序(在我的手机上,位于 LAN 上)设置为连接到 PC 的本地 IP 地址。我检查了代码中的缺陷,发现它是完美的。然而,当我尝试运行它时,我得到了一些非常奇怪的行为:

  1. 端口正确。主机名正确。我尝试连接。什么也没发生。没有建立连接。
  2. 我重置了我的 PC。
  3. 我再试一次。结果还是一样。
  4. 我关闭了本地和公共防火墙。
  5. 现在我得到了一些信息,但仅限于我的客户端设备:[Errno 111] 连接被拒绝。
  6. 我重新打开了防火墙。
  7. 与 1 中结果相同。(无连接)
  8. 我在笔记本电脑上运行主机程序。我尝试连接。成功了!
  9. 我重置了路由器,并再次在 PC 上运行主机程序。结果与 1 相同。
  10. 我现在也在电脑上运行客户端程序,并将其连接到“localhost”。它工作正常。
  11. 我按照 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))

如果我没记错的话,这将尝试绑定到所有可用接口。我不确定你之前尝试过什么,但这应该可以解决你的问题。

相关内容