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()