diff --git a/main.py b/main.py new file mode 100644 index 0000000..aef93ef --- /dev/null +++ b/main.py @@ -0,0 +1,10 @@ +from tcp.TCPServer import TCPServer + + +def main(): + server = TCPServer() + server.run() + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tcp/TCPServer.py b/tcp/TCPServer.py new file mode 100644 index 0000000..e374f68 --- /dev/null +++ b/tcp/TCPServer.py @@ -0,0 +1,51 @@ +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