import socket sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.setblocking(False) #把socket中全部須要阻塞的方法都設爲非阻塞IO, recv,accept, recvfrom sk.listen() conn_l = [] #保存全部來請求server端conn鏈接 del_conn = [] #用來存儲全部已經與server端斷開的conn while True: try: conn,addr = sk.accept() #不阻塞,但沒人連我會報錯,用try...except,直到鏈接創建 print('鏈接創建了',addr) conn_l.append(conn) except BlockingIOError: for con in conn_l: try: msg = con.recv(1024) #不阻塞,可是沒有消息會報錯 if msg == b'': #若是msg爲空, 把相應的鏈接加入del_conn,而後繼續 del_conn.append(con) continue print(msg) con.send(b'hi') except BlockingIOError: pass for con in del_conn: conn.close() conn_l.remove(con) #上次相應del_conn項 del_conn.clear() #清除del_conn列表
import socket import time import threading def func(): sk = socket.socket() sk.connect(('127.0.0.1',8080)) sk.send(b'hello') time.sleep(0.1) sk.send(b'world') time.sleep(0.1) print(sk.recv(1024)) sk.close() for i in range(20): threading.Thread(target=func).start()