first commit
This commit is contained in:
commit
ecaa57fcb1
Binary file not shown.
|
|
@ -0,0 +1,54 @@
|
|||
import socket
|
||||
import threading
|
||||
|
||||
# Configuraci n del servidor
|
||||
HOST = '0.0.0.0' # Escucha en todas las interfaces de red
|
||||
PORT = 3333 # Puerto de escucha
|
||||
clients = [] # Lista para almacenar los clientes conectados
|
||||
|
||||
# Funci n para retransmitir mensajes a todos los clientes
|
||||
def broadcast(message, client_socket):
|
||||
for client in clients:
|
||||
if client != client_socket: # Evitar enviar el mensaje al remitente
|
||||
try:
|
||||
client.send(message)
|
||||
except:
|
||||
# Si falla el env o, eliminar el cliente
|
||||
clients.remove(client)
|
||||
|
||||
# Función para manejar la comunicación con un cliente
|
||||
def handle_client(client_socket, client_address):
|
||||
print(f"[NUEVO CLIENTE] {client_address} conectado.")
|
||||
while True:
|
||||
try:
|
||||
# Recibir mensaje del cliente
|
||||
message = client_socket.recv(1024)
|
||||
if not message:
|
||||
break # Si no hay mensaje, el cliente cerr la conexi n
|
||||
print(f"[{client_address}] {message.decode('utf-8')}")
|
||||
# Retransmitir el mensaje a los dem s clientes
|
||||
broadcast(message, client_socket)
|
||||
except:
|
||||
print(f"[DESCONECTADO] {client_address} se ha desconectado.")
|
||||
clients.remove(client_socket)
|
||||
client_socket.close()
|
||||
break
|
||||
|
||||
# Funci n principal para iniciar el servidor
|
||||
def start_server():
|
||||
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # IPv4, TCP
|
||||
server.bind((HOST, PORT))
|
||||
server.listen(5) # M ximo 5 conexiones en cola
|
||||
print(f"[INICIO] Servidor escuchando en {HOST}:{PORT}")
|
||||
|
||||
while True:
|
||||
client_socket, client_address = server.accept() # Aceptar nueva conexión
|
||||
clients.append(client_socket)
|
||||
print(f"[CONECTADO] Nueva conexi n desde {client_address}")
|
||||
# Iniciar un hilo para manejar el cliente
|
||||
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
|
||||
client_thread.start()
|
||||
|
||||
# Iniciar el servidor
|
||||
if __name__ == "__main__":
|
||||
start_server()
|
||||
Loading…
Reference in New Issue