Browse Source

Create initial tcp server

Sebastian Kramer 3 years ago
parent
commit
a0d4a1e0d3
2 changed files with 61 additions and 0 deletions
  1. 10 0
      main.py
  2. 51 0
      tcp/TCPServer.py

+ 10 - 0
main.py

@@ -0,0 +1,10 @@
+from tcp.TCPServer import TCPServer
+
+
+def main():
+    server = TCPServer()
+    server.run()
+
+
+if __name__ == "__main__":
+    main()

+ 51 - 0
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