非阻塞IO模板
Posted anzhangjun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非阻塞IO模板相关的知识,希望对你有一定的参考价值。
服务端
from socke import * server = socket(AF_INET, SOCK_STREAM) server.bind((‘127.0.0.1‘,8083)) server.listen(5) server.setblocking(False) #1 print(‘starting...‘) rlist=[] #链接套接字加到rlist里 ["链接类型","协议","ip,port"] wlist=[] while True: try: conn, addr = server.accept() rlist.append(conn) print(rlist) except BlockingIOError: # 检测BlockingIOError # print(‘干其他的活‘) #收消息 del_rlist = [] for conn in rlist: #遍历套接字,有消息过来。就继续下一步, # 没消息过来就交conn添加到del_rlist,再去通过del_list列表remove掉rlist里的conn try: data=conn.recv(1024) if not data: del_rlist.append(conn) continue wlist.append((conn,data.upper())) except BlockingIOError: # 检测BlockingIOError continue except Exception: conn.close() del_rlist.append(conn) #发消息 del_wlist=[] for item in wlist: try: conn=item[0] data=item[1] conn.send(data) del_wlist.append(item) except BlockingIOError: pass for item in del_wlist: wlist.remove(item) for conn in del_rlist: rlist.remove(conn) server.close()
客户端
from socket import * client=socket(AF_INET,SOCK_STREAM) client.connect((‘127.0.0.1‘,8080)) while True: msg=input(‘>>: ‘).strip() if not msg:continue client.send(msg.encode(‘utf-8‘)) data=client.recv(1024) print(data.decode(‘utf-8‘)) client.close()
以上是关于非阻塞IO模板的主要内容,如果未能解决你的问题,请参考以下文章