52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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
 |