获取Errno 9:python套接字中的文件描述符错误

Mik*_*avi 26 python sockets

我的代码是这样的:

while 1:
    # Determine whether the server is up or down
    try:
        s.connect((mcip, port))
        s.send(magic)
        data = s.recv(1024)
        s.close()
        print data
    except Exception, e:
        print e
    sleep(60)
Run Code Online (Sandbox Code Playgroud)

它在第一次运行时工作正常,但每次都给我Errno 9.我究竟做错了什么?

顺便说一句,

mcip = "mau5ville.com"
port = 25565
magic = "\xFE"
Run Code Online (Sandbox Code Playgroud)

aba*_*ert 51

你正在呼叫connect关闭的同一个套接字.你不能这样做.

至于该文档close说:

将来对套接字对象的所有操作都将失败.

只需将s = socket.socket()(或任何你拥有的)移动到循环中.(或者,如果您愿意,请使用create_connection而不是分两步执行,这使得更难以出错,并且意味着您不必猜测IPv4与IPv6等)


小智 5

我过去解决过这个问题,

您必须先创建套接字connect()

    s = socket(AF_INET, SOCK_STREAM)
Run Code Online (Sandbox Code Playgroud)

然后继续:

    s.connect((mcip, port))
    s.send(magic)
    data = s.recv(1024)
    s.close()
    print dat
Run Code Online (Sandbox Code Playgroud)