Python 客户端-服务器套接字错误 [Errno 9] 错误的文件描述符
Python client-server socket error [Errno 9] Bad file descriptor
我编写了一个简单的客户端-服务器回显程序,它执行以下操作:
- 客户端发送值 x、y、z、度数、时间戳。
- 服务器接收这些值(作为字符串)并将它们解析为浮点数。
- 服务器发回 ((x/2), (y/2), (z/2) (degree/2))
- 客户端接收数据并打印回来。
程序正常运行,但是一旦客户端回显值,我就会不断收到以下错误:
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py”,第 174 行,在 _dummy 中
引发错误(EBADF,'Bad file descriptor')
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()
您正在 while 循环中关闭套接字连接。
因此您将能够在循环的第一次迭代中接收数据。
之后你关闭了连接。现在在下一次迭代中,您正尝试使用
再次从该连接读取数据
data = conn.recv(1024)
但是您的连接已经关闭。所以你会收到那个错误。
移动
conn.close()
s.close()
脱离你的 while 循环。
我编写了一个简单的客户端-服务器回显程序,它执行以下操作:
- 客户端发送值 x、y、z、度数、时间戳。
- 服务器接收这些值(作为字符串)并将它们解析为浮点数。
- 服务器发回 ((x/2), (y/2), (z/2) (degree/2))
- 客户端接收数据并打印回来。
程序正常运行,但是一旦客户端回显值,我就会不断收到以下错误:
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py”,第 174 行,在 _dummy 中 引发错误(EBADF,'Bad file descriptor') 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()
您正在 while 循环中关闭套接字连接。
因此您将能够在循环的第一次迭代中接收数据。 之后你关闭了连接。现在在下一次迭代中,您正尝试使用
再次从该连接读取数据data = conn.recv(1024)
但是您的连接已经关闭。所以你会收到那个错误。 移动
conn.close()
s.close()
脱离你的 while 循环。