测试代码:
from socketserver import ThreadingTCPServer, StreamRequestHandler
class A(StreamRequestHandler):
clients = {}
def setup(self):
super().setup()
self.event = threading.Event()
self.clients[self.client_address] = self.wfile
def handle(self):
super().handle()
while not self.event.is_set():
data = self.rfile.read1(1024)
data = data.decode().rstrip()
print(data)
if data == 'quit' or data == '':
break
for f in self.clients.values():
f.write(data.encode())
f.flush()
def finish(self):
self.clients.pop(self.client_address)
super().finish()
self.event.set()
ser = ThreadingTCPServer(('127.0.0.1', 9999), A)
ser.daemon_threads = True
threading.Thread(target=ser.serve_forever, name='ser', daemon=True).start()
while True:
cmd = input('>>>').strip()
if cmd == 'quit':
ser.server_close()
break
print(threading.enumerate())