- 服务器对可能阻塞的接受客户和接受数据设置非阻塞套接字,如果阻塞就会报错,将错误抛出正常运行设置一个死循环循环判断客户是否接入,如果接入则存入列表接受数据 ,如果没有则关闭连接继续循环判断客户端的接入
import socket
server = socket.socket()
server.setblocking(False)
server.bind(('127.0.0.1', 8989))
server.listen(5)
all_cli = []
while True:
try:
conn, addr = server.accept()
conn.setblocking(False)
all_cli.append(conn)
except BlockingIOError:
pass
except Exception as e:
print('未知异常', e)
for conn in all_conn:
try:
recv_data = conn.recv(1024)
if recv_data:
print(recv_data)
conn.send(recv_data)
else:
conn.close()
all_conn.remove(conn)
except BlockingIOError:
pass
except Exception as e:
print('未知异常', e)