python io
import socket,select sk = socket.socket() sk.bind(("127.0.0.1",8090)) sk.listen(5) li = [sk,] while True: r,w,e = select.select(li,[],[],5) for obj in r: if obj == sk: conn,addr = obj.accept() print(conn) li.append(conn) else: data=obj.recv(1024).decode("utf8") print("%s 号客户发来: %s"%(li.index(obj),data)) msg = input(">>>:") obj.sendall(msg.encode("utf8")) print("======",r) import socket client = socket.socket() client.connect(("127.0.0.1",8090)) while True: msg = input(">>>") client.send(msg.encode("utf8")) data = client.recv(1024) print(data.decode("utf8"))
selectors
import selectors,socket sel = selectors.DefaultSelector() def accept(sk,mask): conn,addr = sk.accept() print("accepted", conn ,"from", addr) conn.setblocking(False) sel.register(conn,selectors.EVENT_READ,read) def read(conn,mask): try: data = conn.recv(1024) if not data: raise Exception print("echoing", repr(data), "to", conn) conn.send(data) except Exception as e: print("closing", conn) sel.unregister(conn) conn.close() sk = socket.socket() sk.bind(("127.0.0.1",8083)) sk.listen(100) sk.setblocking(False) sel.register(sk,selectors.EVENT_READ,accept) while True: events = sel.select() for key,mask in events: callback = key.data callback(key.fileobj,mask) import socket client = socket.socket() client.connect(("127.0.0.1",8083)) while True: msg = input(">>>") client.send(msg.encode("utf8")) data = client.recv(1024) print(data.decode("utf8"))