1. 程式人生 > >非阻塞IO

非阻塞IO

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