Programación de Redes con Python

Conexión TCP

El modelo TCP en Python implica sockets orientados a conexión. A continuación se describen los pasos esenciales para implementar un servidor y un cliente.

Servidor TCP

El flujo típico para un servidor TCP incluye:

  1. Crear un socket con tipo de red (por ejemplo, IPv4) y modo de transmisión (TCP).
  2. Vincular el socket a una dirección y puerto específicos para permitir conexiones entrantes.
  3. Configurar una cola de escucha para gestionar solicitudes de conexión.
  4. Ejecutar un bucle continuo donde se aceptan nuevas conexiones, devolviendo un socket exclusivo para cada cliente. La lógica de comunicación se maneja en funciones separadas para posibilitar concurrencia.
  5. Realizar operaciones de lectura y escritura mediante los métodos de envío y recepción del socket.

Ejemplo de código para el servidor TCP:

import socket

def ejecutar_servidor_tcp():
    socket_escucha = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket_escucha.bind(('0.0.0.0', 8080))
    socket_escucha.listen(4)

    while True:
        socket_conexion, (direccion_remota, puerto_remoto) = socket_escucha.accept()
        print(f"Conexión establecida desde {direccion_remota}:{puerto_remoto}")
        # Implementar lógica de intercambio de datos aquí
        socket_conexion.close()

if __name__ == "__main__":
    ejecutar_servidor_tcp()

Cleinte TCP

Para un cliente TCP, los pasos son:

  1. Inicializar un socket TCP.
  2. Conectar el socket al servidor mediante la dirección y puerto.
  3. Intercambiar datos a través del socket conectado.

Ejemplo de código para el cliente TCP:

import socket

def ejecutar_cliente_tcp():
    socket_cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket_cliente.connect(('localhost', 8080))

    # Ejemplo de envío y recepción de datos
    # socket_cliente.sendall(b"Hola servidor")
    # respuesta = socket_cliente.recv(1024)
    # print(respuesta.decode())

    socket_cliente.close()

if __name__ == "__main__":
    ejecutar_cliente_tcp()

Conexión UDP

UDP es un protocolo sin conexión, simplificando la transmisión al omitir mecanismos como el handshake y la retransmisión de errores. Esto lo hace más veloz, adecuado para aplicaciones como transmisión de audio o video donde la latencia es crítica y la pérdida ocasionla de paquetes es aceptable.

Servidor UDP

Los pasos para un servidor UDP son:

  1. Crear un socket de datagramas (UDP).
  2. Enlazar el socket a un puerto para recibir paquetes.
  3. Permanecer en espera de datagramas entrantes.

Ejemplo de código para el servidor UDP:

import socket

def iniciar_servidor_udp():
    direccion_servidor = ('0.0.0.0', 8080)
    socket_recepcion = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    socket_recepcion.bind(direccion_servidor)

    while True:
        datos, direccion_cliente = socket_recepcion.recvfrom(2048)
        print(f"Datos recibidos de {direccion_cliente}: {datos.decode()}")

if __name__ == "__main__":
    iniciar_servidor_udp()

En el servidor, la dirección vacía ('') indica que se aceptan paquetes de cualquier origen.

Cliente UDP

El cliente UDP solo necesita crear un socket y enviar o recibir datos:

  1. Instanciar un socket UDP.
  2. Enviar datagramas a una dirección y puerto específicos.
  3. Opcionalmente, recibir respuestas si es necesario.

Ejemplo de código para el cliente UDP:

import socket

def ejecutar_cliente_udp():
    direccion_destino = ('localhost', 8080)
    socket_envio = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    mensaje = b"Paquete UDP de prueba"
    socket_envio.sendto(mensaje, direccion_destino)
    socket_envio.close()

if __name__ == "__main__":
    ejecutar_cliente_udp()

Etiquetas: Python tcp UDP Socket redes

Publicado el 7-6 21:55