非阻塞IO
阿新 • • 發佈:2017-09-01
tar move try 新建 strip() del connect err close
服務端 from socket import * import time server = socket(AF_INET,SOCK_STREAM) server.bind((‘127.0.0.1‘,8081)) server.listen(3) server.setblocking(False) #accept變為非阻塞狀態, print(‘server startting...‘) conn_l = [] #存放原始數據 del_l = [] #存放錯誤的數據 while True: #鏈接循環 try: print(‘=====>‘,conn_l) #鏈接地址 conn,addr = server.accept() #如果沒有異常處理立馬拋出錯誤 conn是鏈接,可以收發消息 # print(addr) conn_l.append(conn) except BlockingIOError: #收不到數據幹這裏的 time.sleep(4) #休眠兩秒,繼續 for conn in conn_l: #再次循環列表中的conn try: data = conn.recv(1024) conn.send(data.upper()) except BlockingIOError: pass except ConnectionResetError: del_l.append(conn) #錯誤的conn添加到del_l for obj in del_l: obj.close() #和conn.close 一樣,只是換了個名字 conn_l.remove(obj) #將那個錯誤的obj直接從元列表刪除 del_l = [] #清空列表 清空之後下次還可以接收,刪除了就沒地方存放他的值 continue #新建一個存放錯誤值的列表,然後 客戶端 from socket import * client = socket(AF_INET,SOCK_STREAM) client.connect((‘127.0.0.1‘,8081)) while True: msg = input(‘p;ease:‘).strip() if not msg:continue client.send(msg.encode(‘utf-8‘)) data = client.recv(1024) print(data.decode(‘utf-8‘))
非阻塞IO