diff --git a/Cliente.py b/Cliente.py index 53915f2..846f0f6 100644 --- a/Cliente.py +++ b/Cliente.py @@ -1,22 +1,43 @@ import socket +import time +import sys -HOST = '192.168.50.166' +def get_ip_address(): + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + try: + s.connect(('10.255.255.255', 1)) + IP = s.getsockname()[0] + except Exception: + IP = '127.0.0.1' + finally: + s.close() + return IP + +HOST = get_ip_address() PORT = 2005 while True: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: server_address = (HOST, PORT) - s.connect(server_address) - command = input("Entra comando (retirar o 'exit' para salir): ") - if command.lower() == 'exit': - break - elif command.lower() == 'retirar': - amount = input("Entera la cantidad de dinero: ") - message = f"{command} {amount}" - else: - print("Comando no reconocido") - print('Mandando {!r}'.format(message)) + try: + s.connect(server_address) + except ConnectionRefusedError: + print("Connection refused, try again later.") + sys.exit() # Terminate the program + # Send a message immediately after connecting + message = "Conectando!" + print('{!r}'.format(message)) s.sendall(message.encode('utf-8')) print('Esperando la respuesta') - data = s.recv(1024) # línea bloqueante - print('recibido {!r} de {}'.format(data.decode('utf-8'), server_address)) \ No newline at end of file + while True: # Keep the connection open until the user enters a command + command = input("Entra comando (retirar o 'exit' para salir): ") + if command.lower() == 'exit': + break + elif command.lower() == 'retirar': + amount = input("Entera la cantidad de dinero: ") + message = f"{command} {amount}" + else: + print("Comando no reconocido") + message = command # Send the unrecognized command to the server + s.sendall(message.encode('utf-8')) + diff --git a/Cliente2.py b/Cliente2.py index 53915f2..846f0f6 100644 --- a/Cliente2.py +++ b/Cliente2.py @@ -1,22 +1,43 @@ import socket +import time +import sys -HOST = '192.168.50.166' +def get_ip_address(): + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + try: + s.connect(('10.255.255.255', 1)) + IP = s.getsockname()[0] + except Exception: + IP = '127.0.0.1' + finally: + s.close() + return IP + +HOST = get_ip_address() PORT = 2005 while True: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: server_address = (HOST, PORT) - s.connect(server_address) - command = input("Entra comando (retirar o 'exit' para salir): ") - if command.lower() == 'exit': - break - elif command.lower() == 'retirar': - amount = input("Entera la cantidad de dinero: ") - message = f"{command} {amount}" - else: - print("Comando no reconocido") - print('Mandando {!r}'.format(message)) + try: + s.connect(server_address) + except ConnectionRefusedError: + print("Connection refused, try again later.") + sys.exit() # Terminate the program + # Send a message immediately after connecting + message = "Conectando!" + print('{!r}'.format(message)) s.sendall(message.encode('utf-8')) print('Esperando la respuesta') - data = s.recv(1024) # línea bloqueante - print('recibido {!r} de {}'.format(data.decode('utf-8'), server_address)) \ No newline at end of file + while True: # Keep the connection open until the user enters a command + command = input("Entra comando (retirar o 'exit' para salir): ") + if command.lower() == 'exit': + break + elif command.lower() == 'retirar': + amount = input("Entera la cantidad de dinero: ") + message = f"{command} {amount}" + else: + print("Comando no reconocido") + message = command # Send the unrecognized command to the server + s.sendall(message.encode('utf-8')) + diff --git a/Cliente3.py b/Cliente3.py index 53915f2..846f0f6 100644 --- a/Cliente3.py +++ b/Cliente3.py @@ -1,22 +1,43 @@ import socket +import time +import sys -HOST = '192.168.50.166' +def get_ip_address(): + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + try: + s.connect(('10.255.255.255', 1)) + IP = s.getsockname()[0] + except Exception: + IP = '127.0.0.1' + finally: + s.close() + return IP + +HOST = get_ip_address() PORT = 2005 while True: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: server_address = (HOST, PORT) - s.connect(server_address) - command = input("Entra comando (retirar o 'exit' para salir): ") - if command.lower() == 'exit': - break - elif command.lower() == 'retirar': - amount = input("Entera la cantidad de dinero: ") - message = f"{command} {amount}" - else: - print("Comando no reconocido") - print('Mandando {!r}'.format(message)) + try: + s.connect(server_address) + except ConnectionRefusedError: + print("Connection refused, try again later.") + sys.exit() # Terminate the program + # Send a message immediately after connecting + message = "Conectando!" + print('{!r}'.format(message)) s.sendall(message.encode('utf-8')) print('Esperando la respuesta') - data = s.recv(1024) # línea bloqueante - print('recibido {!r} de {}'.format(data.decode('utf-8'), server_address)) \ No newline at end of file + while True: # Keep the connection open until the user enters a command + command = input("Entra comando (retirar o 'exit' para salir): ") + if command.lower() == 'exit': + break + elif command.lower() == 'retirar': + amount = input("Entera la cantidad de dinero: ") + message = f"{command} {amount}" + else: + print("Comando no reconocido") + message = command # Send the unrecognized command to the server + s.sendall(message.encode('utf-8')) + diff --git a/Cliente4.py b/Cliente4.py index 53915f2..846f0f6 100644 --- a/Cliente4.py +++ b/Cliente4.py @@ -1,22 +1,43 @@ import socket +import time +import sys -HOST = '192.168.50.166' +def get_ip_address(): + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + try: + s.connect(('10.255.255.255', 1)) + IP = s.getsockname()[0] + except Exception: + IP = '127.0.0.1' + finally: + s.close() + return IP + +HOST = get_ip_address() PORT = 2005 while True: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: server_address = (HOST, PORT) - s.connect(server_address) - command = input("Entra comando (retirar o 'exit' para salir): ") - if command.lower() == 'exit': - break - elif command.lower() == 'retirar': - amount = input("Entera la cantidad de dinero: ") - message = f"{command} {amount}" - else: - print("Comando no reconocido") - print('Mandando {!r}'.format(message)) + try: + s.connect(server_address) + except ConnectionRefusedError: + print("Connection refused, try again later.") + sys.exit() # Terminate the program + # Send a message immediately after connecting + message = "Conectando!" + print('{!r}'.format(message)) s.sendall(message.encode('utf-8')) print('Esperando la respuesta') - data = s.recv(1024) # línea bloqueante - print('recibido {!r} de {}'.format(data.decode('utf-8'), server_address)) \ No newline at end of file + while True: # Keep the connection open until the user enters a command + command = input("Entra comando (retirar o 'exit' para salir): ") + if command.lower() == 'exit': + break + elif command.lower() == 'retirar': + amount = input("Entera la cantidad de dinero: ") + message = f"{command} {amount}" + else: + print("Comando no reconocido") + message = command # Send the unrecognized command to the server + s.sendall(message.encode('utf-8')) + diff --git a/Cliente5.py b/Cliente5.py deleted file mode 100644 index 53915f2..0000000 --- a/Cliente5.py +++ /dev/null @@ -1,22 +0,0 @@ -import socket - -HOST = '192.168.50.166' -PORT = 2005 - -while True: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - server_address = (HOST, PORT) - s.connect(server_address) - command = input("Entra comando (retirar o 'exit' para salir): ") - if command.lower() == 'exit': - break - elif command.lower() == 'retirar': - amount = input("Entera la cantidad de dinero: ") - message = f"{command} {amount}" - else: - print("Comando no reconocido") - print('Mandando {!r}'.format(message)) - s.sendall(message.encode('utf-8')) - print('Esperando la respuesta') - data = s.recv(1024) # línea bloqueante - print('recibido {!r} de {}'.format(data.decode('utf-8'), server_address)) \ No newline at end of file diff --git a/Cliente6.py b/Cliente6.py deleted file mode 100644 index 53915f2..0000000 --- a/Cliente6.py +++ /dev/null @@ -1,22 +0,0 @@ -import socket - -HOST = '192.168.50.166' -PORT = 2005 - -while True: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - server_address = (HOST, PORT) - s.connect(server_address) - command = input("Entra comando (retirar o 'exit' para salir): ") - if command.lower() == 'exit': - break - elif command.lower() == 'retirar': - amount = input("Entera la cantidad de dinero: ") - message = f"{command} {amount}" - else: - print("Comando no reconocido") - print('Mandando {!r}'.format(message)) - s.sendall(message.encode('utf-8')) - print('Esperando la respuesta') - data = s.recv(1024) # línea bloqueante - print('recibido {!r} de {}'.format(data.decode('utf-8'), server_address)) \ No newline at end of file diff --git a/ServidorCajero.py b/ServidorCajero.py index c6bddcd..dafd892 100644 --- a/ServidorCajero.py +++ b/ServidorCajero.py @@ -1,36 +1,61 @@ import socket +import threading HOST = '' PORT = 2005 -MAX_CONNECTIONS = 2 +MAX_CONNECTIONS = 3 MAX_DINERO = 120000 connections = 0 -#pip install six -with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s_addr = (HOST, PORT) - s.bind(s_addr) - s.listen(MAX_CONNECTIONS) +max_connections_reached = False # Add a flag for max connections reached + +def handle_client(client_socket, addr): + global connections + global MAX_DINERO + global max_connections_reached # Access the global flag + print(f"cliente conectado {addr})") + connections += 1 + if connections < MAX_CONNECTIONS: + max_connections_reached = False # Reset the flag when connections drop below max + print(f"Conexiones activas: {connections}") + client_socket.settimeout(60) # Set a timeout of 60 seconds while True: - if connections >= MAX_CONNECTIONS: - print('Maximo de conexiones alcanzado, esperando a que se libere una conexion.') - continue - client_socket, addr = s.accept() - connections += 1 # Increment connections after the check - with client_socket: - while True: - datos = client_socket.recv(1024) - if not datos: - connections -= 1 - break - print('Cliente connectetado y datos enviados : {} bytes de {}'.format(len(datos), addr)) - command, amount = datos.decode('utf-8').split() + try: + datos = client_socket.recv(1024) + if not datos: + print("No data received from client. Closing connection.") + break # Close the connection when no data is received + decoded_data = datos.decode('utf-8') + if ' ' in decoded_data: + command, amount = decoded_data.split() amount = int(amount) if command.lower() == 'retirar': - print('retiro exitoso') 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." client_socket.sendall(response.encode('utf-8')) - print('enviados {} bytes de vuelta a {}'.format(len(response), addr)) \ No newline at end of file + else: + print(f"Received unexpected data: {decoded_data}") + except socket.timeout: + print("Client did not send data within the timeout period.") + connections -= 1 + print(f"Conexiones activas: {connections}") + client_socket.close() + +with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s_addr = (HOST, PORT) + s.bind(s_addr) + s.listen(MAX_CONNECTIONS) + while True: + if connections >= MAX_CONNECTIONS: + if not max_connections_reached: # Only print the message if the flag is False + print('Maximo de conexiones alcanzado, esperando a que se libere una conexion.') + max_connections_reached = True # Set the flag to True after printing the message + continue + client_socket, addr = s.accept() + client_thread = threading.Thread(target=handle_client, args=(client_socket, addr)) + client_thread.daemon = True + client_thread.start() \ No newline at end of file