import socket import _thread class TCPServer(socket.socket): clients = [] def __init__(self): socket.socket.__init__(self) self.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.bind(('0.0.0.0', 8765)) self.listen(5) def run(self): print("Starting TCP Server") try: self.accept_clients() except Exception as ex: print(ex) finally: print("Server shutdown") for client in self.clients: client.close() self.close() def accept_clients(self): while True: (client_socket, address) = self.accept() self.clients.append(client_socket) self.on_open(client_socket) _thread.start_new_thread(self.receive, (client_socket,)) def receive(self, client): while True: data = client.recv(1024) if data == '': break self.on_message(client, data) self.clients.remove(client) self.on_close(client) client.close() _thread.exit() def on_open(self, client): pass def on_message(self, client, message): pass def on_close(self, client): pass