import socket import threading HOST = '' PORT = 2002 MAX_CONNECTIONS = 3 MAX_DINERO = 120000 connections = 0 max_connections_reached = False dinero_lock = threading.Lock() def handle_client(client_socket, addr): global connections global MAX_DINERO if connections >= MAX_CONNECTIONS: response = "Maximo numero de conexiones alcanzado. Por favor intente mas tarde." client_socket.sendall(response.encode('utf-8')) client_socket.close() return print(f"cliente conectado {addr})") connections += 1 print(f"Conexiones activas: {connections}") try: while True: try: datos = client_socket.recv(1024) except ConnectionResetError: print("Connection was closed by the client.") break if not datos: print("No data received from client. Closing connection.") break decoded_data = datos.decode('utf-8') if decoded_data.lower() == 'conectando!': response = "Connection successful!" client_socket.sendall(response.encode('utf-8')) elif ' ' in decoded_data: command, amount = decoded_data.split() amount = int(amount) if command.lower() == 'retirar': with dinero_lock: if amount <= MAX_DINERO: MAX_DINERO -= amount response = f"Retiro Existoso." print("Retiro Existoso.") print(f"Saldo restante: {MAX_DINERO}") else: response = "Saldo insuficiente por favor intente mas tarde." print("Saldo insuficiente para operacion.") client_socket.sendall(response.encode('utf-8')) elif command.lower() == 'exit': break else: print(f"Received unexpected data: {decoded_data}") except socket.timeout: print("Client did not send data within the timeout period.") finally: connections -= 1 print(f"Conexiones activas: {connections}") client_socket.close() while True: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: server_address = (HOST, PORT) s.bind(server_address) s.listen(MAX_CONNECTIONS) while True: if connections < MAX_CONNECTIONS: client_socket, addr = s.accept() client_thread = threading.Thread(target=handle_client, args=(client_socket, addr)) client_thread.start()