这是底层包装了一个for循环

同时相同功能的还有poll  epoll,学习socket是因为它可以跨平台,但是效率不高

#coding=utf-8
import select
import socket
ip_addr=("127.0.0.1",9556)
s=socket.socket
s.blind(ip_addr)
s.listen(5)
inputs=[]
outputs=[]
message={}
while True:
r,w,s=select.select([s,],outputs,[],1)
print(len(inputs),len(r),len(w),len(outputs))#打印长度
for list_num in r:
if list_num==s:
print(list_num)
conn,address=list_num.accept()
inputs.append(list_num)
message[list_num]=[]#生命列表
conn.sendall(bytes("Hello",encoding="utf-8"))
else:
try:
ret=list_num.recv(1024)
if not ret:
raise Exception("断开链接")#剖出异常
else:
outputs.append(list_num)#添加到需要回复的列表
message[list_num].append(ret)#将消息做成字典
except:
inputs.remove(list_num)
del message[list_num]
for w_k in w:#循环接收到消息的类表
w_k.sendall(bytes("Reponse",encoding="utf-8"))
outputs.remove(w_k)#回复完毕后删除对象