Intentando limitar el numero de cliente que pueden usar el servidor

master
vicsash 9 months ago
parent c0fb239118
commit ff3566fec7

@ -1,12 +1,35 @@
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)
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')
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
@ -15,8 +38,6 @@ while True:
message = f"{command} {amount}"
else:
print("Comando no reconocido")
print('Mandando {!r}'.format(message))
message = command # Send the unrecognized command to the server
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))

@ -1,12 +1,35 @@
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)
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')
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
@ -15,8 +38,6 @@ while True:
message = f"{command} {amount}"
else:
print("Comando no reconocido")
print('Mandando {!r}'.format(message))
message = command # Send the unrecognized command to the server
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))

@ -1,12 +1,35 @@
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)
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')
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
@ -15,8 +38,6 @@ while True:
message = f"{command} {amount}"
else:
print("Comando no reconocido")
print('Mandando {!r}'.format(message))
message = command # Send the unrecognized command to the server
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))

@ -1,12 +1,35 @@
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)
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')
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
@ -15,8 +38,6 @@ while True:
message = f"{command} {amount}"
else:
print("Comando no reconocido")
print('Mandando {!r}'.format(message))
message = command # Send the unrecognized command to the server
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))

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

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

@ -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)
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:
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:
try:
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()
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))
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()
Loading…
Cancel
Save

Powered by INFORMATICA.FP.EDU.ES.