创建socket服务端
server = socket.socket()
设置非阻塞
server.setblocking(False)
绑定IP和端口
server.bind(('',6969))
监听
server.listen(5)
存放连接进来的客户端
client_list = []
accept()和recv()方法,设置非阻塞后,在没有数据到达时会引发blockingIOError,需要用try捕获。
设置一个大循环,用于不断接收来自不同用户的连接请求。
while True:
try:
conn.addr = server.accept()
conn.setblocking(False)
设置多用户连入时非阻塞。
client_list.append((conn,addr))
print('连接:{}'.format(addr))
except BlockingIOError:
pass
for client,addr in client_list:
轮询客户端是否发送数据:
try:
捕获recv引发的异常
recv_data = client.recv(1024)
if recv_data:
print('接收来自:{}>>>{}'.format(addr,recv_data.decode('utf-8'))')
client.send(recv_data)
发回数据
else:
client_list.remove((client,addr))
删除列表中的客户端
client.close()
except BlockingIOError:
pass