【问题标题】:Errno 10061 : No connection could be made because the target machine actively refused it ( client - server )Errno 10061:无法建立连接,因为目标机器主动拒绝(客户端-服务器)
【发布时间】:2012-10-11 04:35:15
【问题描述】:

我的这些客户端和服务器代码有问题,我一直收到 [Errno 10061] 无法建立连接,因为目标机器主动拒绝了它

我在带有 Windows XP SP3 的虚拟机上运行服务器,在 Windows 7 64 位上运行客户端,我的 python 版本是 2.7.3。我想知道的是我应该如何编辑代码以在不同的网络上使用客户端和服务器!谢谢!

服务器:

#!/usr/bin/python           # This is server.py file

import socket               # Import socket module
s = socket.socket()         # Create a socket object
host = '0.0.0.0' # Get local machine name
port = 12345                # Reserve a port for your service.


print 'Server started!'
print 'Waiting for clients...'

s.bind((host, port))        # Bind to the port
s.listen(5)                 # Now wait for client connection.
c, addr = s.accept()     # Establish connection with client.
print 'Got connection from', addr
while True:
  msg = c.recv(1024)
  print addr, ' >> ', msg
  msg = raw_input('SERVER >> ')
  c.send(msg);
  #c.close()                # Close the connection

客户:

#!/usr/bin/python           # This is client.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.

print 'Connecting to ', host, port
s.connect((host, port))

while True:
  msg = raw_input('CLIENT >> ')
  s.send(msg)
  msg = s.recv(1024)
  print 'SERVER >> ', msg
#s.close                     # Close the socket when done

PS : 代码来自网络。

【问题讨论】:

  • 主动拒绝表示服务器机器的防火墙阻止了连接,可能与代码无关。
  • 防火墙已关闭:/ 仍然出现错误
  • 您的 VM 来宾如何连接到网络?通过 NAT + 端口转发还是通过桥接模式?
  • 通过 NAT + 端口转发!

标签: python sockets


【解决方案1】:

10061 是 WSAECONNREFUSED,“连接被拒绝”,这意味着在您尝试连接的 IP:端口上没有任何监听。

大约在 2000 年有一个防火墙产品发出拒绝而不是忽略到被阻止端口的传入连接,但这很快被认为是向攻击者泄露信息并更正或撤回。

【讨论】:

    【解决方案2】:

    提示:actively refused 听起来有点深奥的技术问题,但是...

    ...实际上,如果在目标机器上调用 bin/mongo 可执行文件and the mongodb service is simply not running,也会给出此响应(特别是errno:10061)。这甚至适用于本地机器实例(都发生在本地主机上)。

    始终首先排除这种微不足道的可能性,即只需使用命令行客户端访问您的数据库。

    See here.

    【讨论】:

      【解决方案3】:

      使用来自:https://docs.python.org/3.2/library/socketserver.html 的示例 我确定我需要将 HOST 端口设置为运行服务器程序的机器。所以 TCPServer on 192.168.0.1 HOST = TCPServer IP 192.168.0.1 然后我必须将 TCPClient 端设置为指向 TCPServer IP。所以 TCPClient HOST 值 = 192.168.0.1 - 抱歉,这是我能描述的最好的了。

      【讨论】:

      • 换句话说你的目标IP地址错误。
      【解决方案4】:

      错误和防火墙没有关系。

      首先,运行服务器程序,
      然后在 python 的另一个 shell 中运行客户端程序

      它会起作用的

      【讨论】:

      • 是的,它对我有用,但是如何启动一个不同的python空闲shell,只需右键单击任务栏上的空闲符号,然后单击idle3.8,然后它会打开一个新的shell。
      【解决方案5】:

      所以我遇到了同样的问题, 对我有用的解决方案是......

      我假设您的服务器和客户端程序是用 python 编写的。

      1. 首先,打开一个python shell
      2. 首先打开并运行Server程序
      3. 然后打开另一个不同的python shell
      4. 在此处打开并运行客户端程序
      5. 完成!!

      【讨论】:

        【解决方案6】:

        使用本地网络地址作为主机,而不是 '0.0.0.0' 的 localhost - 服务器和客户端 - 代码。

        主机 = '192.168.12.12' 端口 = 12345

        在绑定和连接到套接字时使用这个主机地址。

        server.bind((主机,端口)) client.connect((主机, 端口))

        此更改为我解决了问题。

        【讨论】:

          【解决方案7】:

          如果您的机器上安装了远程服务器。将 server.py 主机作为“localhost”和端口号。 然后客户端,您必须提供本地 ip- 127.0.0.1 和端口号。 然后它的作品

          【讨论】:

          • 问题是关于“不同的网络”,这个答案甚至在同一个网络中的不同主机上都不起作用,更不用说不同的网络了。
          【解决方案8】:

          我在使用 python 库调用 REST API 时遇到了类似的问题,我发现我的服务器正在进入睡眠模式,这导致了这种情况。一旦我通过远程桌面连接登录到服务器,我的 API 调用就可以正常工作。

          【讨论】:

            【解决方案9】:

            这可能是因为代理或防火墙。如果是代理,则需要在代码或项目的入口处指定代理设置。

            import os #for proxy
            
            proxy = 'http://10.XX.XX.XX:8X8X' #your own proxy 'http://<user>:<pass>@<proxy>:<port>'
            
            os.environ['http_proxy'] = proxy 
            os.environ['HTTP_PROXY'] = proxy
            os.environ['https_proxy'] = proxy
            os.environ['HTTPS_PROXY'] = proxy
            #rest of code .....
            

            【讨论】:

              【解决方案10】:

              以下更改解决了我的问题。 我为同样的错误苦苦挣扎了一周。我想和大家分享一下,解决方案只是服务器中的host = ''和服务器的客户端host = ip

              【讨论】:

              • 如果服务器一直在监听 127.0.0.1。它并不是针对所有此错误情况的通用解决方案。
              【解决方案11】:

              第一个:请确保您的端口“12345”已打开,然后 当您使用不同的网络时。您必须在 LAN 中使用 IP 地址。不要使用“localhost”或“127.0.0.1”。 这里的解决方案是: 在服务器中

              host = '192.168.1.12' #Ip address in LAN network
              

              在客户端

              host = '27.32.123.32' # external IP Address
              

              希望对你有用

              【讨论】:

              • host='' 在服务器中更好,即在 0.0.0.0 处收听。这样它就支持多宿主,并且在重新配置后仍然存在。
              • 是的。如果您使用域,那么您的解决方案会更好。但我认为在这种情况下我们应该使用静态 IP 地址
              • 你这么认为,为什么?无论如何都不是更好。
              【解决方案12】:

              我遇到错误 10060 和 10061。原因在于我的防病毒软件(Eset Nod 32)。尝试像我一样关闭防病毒软件的防火墙,或者只是将其删除一段时间以测试程序。如果一切开始正常工作,将该程序添加到排除项或切换到另一个防病毒软件。 另外,尝试将 'host' 变量更改为空字符串:

              host = ''
              

              并将socket.AF_INET、socket.SOCK_STREAM添加到's'变量中:

              s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
              

              【讨论】:

                【解决方案13】:

                解决方案是在客户端和服务器中使用相同的 IP 和端口号。 试试,在客户端使用 TCP_IP = '这里写ip号' TCP_PORT = 此处写入端口号 s.connect((TCP_IP, TCP_PORT))

                【讨论】:

                • 解决方法一般是在服务器使用0.0.0.0。
                【解决方案14】:

                短期解决方案是使用默认的 iis 主机和端口,通常分别为 120.0.0.1 和 80。但是,我仍在寻找更通用的解决方案。

                【讨论】:

                • 鉴于 OP 在两台机器上运行,而且这是一个 localhost 解决方案,它不太可能工作?
                • 鉴于 localhost 是 127.0.0.1,而不是 120.0.0.1,它甚至无法在一台主机上运行。
                【解决方案15】:

                当您在windows机器上运行代码时,防火墙提示它允许网络访问,允许网络访问并且它将起作用,如果没有提示,请转到防火墙设置>允许应用程序通过防火墙并选择您的python。 exe并允许网络访问。

                【讨论】:

                • 防火墙会导致连接超时,而不是连接拒绝。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-10-23
                • 2011-10-25
                • 1970-01-01
                • 2021-11-10
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多