
import socket

# Configuración
HOST = '0.0.0.0'  # Escucha en todas las interfaces de red disponibles
PORT = 9097       # El puerto que quieres usar para la escucha

def receive_udp_packets():
    """
    Crea un socket UDP, se enlaza al host y puerto especificados,
    y escucha paquetes entrantes, imprimiendo su contenido.
    """
    # 1. Crear un socket UDP
    # AF_INET indica el uso de IPv4
    # SOCK_DGRAM indica que es un socket UDP (datagrama)
    try:
        with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
            # 2. Enlazar el socket a la dirección y puerto
            s.bind((HOST, PORT))
            print(f"Escuchando paquetes UDP en {HOST}:{PORT}...")
            
            # 3. Bucle infinito para recibir datos
            while True:
                # recvfrom() devuelve los datos y la dirección del remitente
                data, addr = s.recvfrom(1024)  # El búfer de 1024 bytes es suficiente para la mayoría de los paquetes
                
                # 4. Decodificar los datos y mostrarlos
                message = data.decode('utf-8')
                print(f"[{addr[0]}:{addr[1]}] -> {message}")
                
    except socket.error as e:
        print(f"Error al crear o enlazar el socket: {e}")
    except KeyboardInterrupt:
        print("\nPrograma detenido por el usuario.")

if __name__ == "__main__":
    receive_udp_packets()