import select
sk = socket.socket()
sk.bind(('127.0.0.1',8099))
r_list =[sk]
r,w,x = select.select(r_list,[],[])#select.select(要读取数据的对象的列表,要写入操作的对象的列表,感知修改的对象的列表)#三个参数必须传,没有就为空列表#返回三个参数列表组成的元组r_list,w_list,x_list#server会一直阻塞直到客户端请求到来#返回的列表中的元素实际是要接收连接的代理对象sk#例如r_list[]中有10个对象有监听各自的连接,一个连接来了,只会返回对应这个连接的监听对象组成的列表#不会返回所有for i in r:if i is sk:#如果返回的列表是sk对象
conn,addr = i.accept()
r_list .append(conn)#将conn对象添加到监听列表else:#返回的不是sk对象就是conn对象
ret = i.recv(1024)#conn.recv接收数据if ret == b'':#conn断开的话收到的数据为空
i.close()#关闭这个连接
r_list .remove(i)#从监听列表中移除这个conncontinueprint(ret)
i.send(b'goodbye!')