You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.7 KiB

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()

Powered by INFORMATICA.FP.EDU.ES.