【问题标题】:(Python) socket.gaierror: [Errno 11001] getaddrinfo failed(Python) socket.gaierror: [Errno 11001] getaddrinfo 失败
【发布时间】:2009-04-21 06:18:24
【问题描述】:

我不确定这段代码有什么问题,我不断收到 socket.gaierror 错误;\。

import sys
import socket
import random

filename = "whoiservers.txt"

server_name = random.choice(list(open(filename)))

print "connecting to %s..." % server_name

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((server_name, 43))
s.send(sys.argv[1] + "\r\n")
response = ''
while True:
    d = s.recv(4096)
    response += d
    if d == '':
        break
s.close()
print
print response


    s.connect((server_name, 43))
  File "<string>", line 1, in connect
socket.gaierror: [Errno 11001] getaddrinfo failed

更新:

添加server_name = random.choice(list(open(filename)))[:-1] 后,我不再得到那个socket.gaierror,但我得到了:

socket.error: [Errno 10060] 连接尝试失败,因为连接的 pa rty在一段时间后没有正确响应,或者建立连接f 由于连接的主机未能响应而出现故障

【问题讨论】:

    标签: python sockets


    【解决方案1】:

    我认为问题在于server_name 末尾的换行符。

    如果您的文件whoiservers.txt 的格式是每行一个主机名,那么您需要在主机名末尾去掉换行符,然后再将其传递给s.connect()

    因此,例如,将打开的行更改为:

    server_name = random.choice(list(open(filename)))[:-1]
    

    【讨论】:

    • 很奇怪。我遇到了这个问题,然后这帮助我解决了这个问题。这就是我的代码中的内容:mailserver = "foobar" #comment。所以为了解决这个问题,我在我的代码中删除了服务器名称末尾的一些字符:mailserver = "fooba #comment。然后我将这些字符添加回来:mailserver = "foobar" #comment。从socket.connect((mailserver, 587))socket.connect((mailserve87)) 再到socket.connect((mailserver, 587)),我也做了同样的事情。之后,问题得到解决。似乎在这些字符之间的某个地方有一个不可见的换行符。奇怪!!!!!!
    【解决方案2】:

    也许您和这些服务器之间有防火墙阻止了请求?您发布的最后一个错误导致人们认为它根本无法连接到服务器......

    【讨论】:

      猜你喜欢
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 2018-02-12
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      相关资源
      最近更新 更多