【问题标题】:Python client-server socket error [Errno 9] Bad file descriptorPython客户端-服务器套接字错误[Errno 9]错误的文件描述符
【发布时间】:2019-03-24 15:39:19
【问题描述】:

我编写了一个简单的客户端-服务器回显程序,它执行以下操作:

  1. 客户端发送值 x、y、z、度数、时间戳。
  2. 服务器接收这些值(作为字符串)并将它们解析为浮点数。
  3. 服务器发回 ((x/2), (y/2), (z/2) (degree/2))
  4. 客户端接收数据并将其打印回来。

程序正在按应有的方式执行,但是一旦客户端回显这些值,我就会不断收到以下错误:

文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py”,第 174 行,在 _dummy 引发错误(EBADF,'错误的文件描述符') socket.error: [Errno 9] 错误的文件描述符

我是 python 新手,所以我不确定是什么原因造成的。我读到它可能与我关闭连接和套接字的方式有关,但我认为我做得对。感谢您对查找和修复错误的任何帮助(并帮助我了解有关 python 的更多信息)!这是我的服务器,它给了我错误:

    import socket


    HOST = '127.0.0.1'
    PORT = 56789

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(1)
    conn, addr = s.accept()
    print('Connection address: ', addr)
    Message = ''
    while 1:
        data = conn.recv(1024)
        if not data:
            break
        print('Received data: ', data)
        List = data.split(',')
        x = float(List[0]) / 2.0
        y = float(List[1]) / 2.0
        z = float(List[2]) / 2.0
        degree = float(List[3]) / 2.0
        Message = str(x) + ', '
        Message += str(y) + ', '
        Message += str(z) + ', '
        Message += str(degree)
        conn.send(Message)
        conn.close()
        s.close()

【问题讨论】:

    标签: python sockets client-server file-descriptor


    【解决方案1】:

    你正在 while 循环中关闭你的套接字连接。

    这样您就可以在循环的第一次迭代中接收数据。 之后你关闭了连接。现在在下一次迭代中,您尝试使用

    再次从该连接中读取数据

    数据 = conn.recv(1024)

    但您的连接已关闭。所以你会收到那个错误。 移动

    conn.close()
    s.close()
    

    退出你的while循环。

    【讨论】:

    • 天哪,非常感谢。这是一个愚蠢的错误。我还在习惯 python 的间距规范。
    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    相关资源
    最近更新 更多