基于select的IO多路复用并发模型
服务端:
from socket import * from select import * HOST='0.0.0.0' PORT=8585 ADDR=(HOST,PORT) tcp_socket=socket() tcp_socket.bind(ADDR) tcp_socket.listen(5) print(tcp_socket) #监听读IO列表 rlist=[tcp_socket] #监听写IO列表 wlist=[] #监听异常IO列表 ps:linux中这个列表不用 因为linux不会主动处理异常 xlist=[] while True: #监听IO #rs,ws,xs分别为读、写、异常事件IO的返回列表 rs, ws, xs = select(rlist,wlist,xlist) for r in rs: #当rs列表中r与tcp_socket为同一对象时 if r is tcp_socket: connfd,addr=rs[0].accept() print('connect from',addr) rlist.append(connfd) else: data=r.recv(1024) if not data: print('退出',r) r.close() rlist.remove(r) continue else: print(data.decode()) wlist.append(r) for w in ws: w.send(b'ok')
客户端:
""" /etc/python3 @File : tcp_conecter.py @Time : 2020/7/17 下午2:43 @Author : wangyongqi @Email : 92644827@qq.com @SOftware : PyCharm """ from socket import socket sockfd=socket() sockfd.connect(('0.0.0.0',9548)) while True: sockfd.send(input(">>").encode())
python