2 usuarios conectados

Redes y comunicación. Programación de sockets

Comparte esto

Ahora vamos a adentrarnos en el mundo de las Redes y Comunicación en Python, comenzando con la programación de sockets utilizando el módulo socket. Este módulo proporciona una interfaz de bajo nivel para la creación y manipulación de sockets de red, que son los puntos finales para enviar y recibir datos a través de una red.

Programación de Sockets en Python (Módulo socket)

El módulo socket en Python permite a los desarrolladores crear aplicaciones de red, como servidores web, clientes de correo electrónico, programas de chat y más. La programación de sockets implica trabajar con conceptos como direcciones IP, puertos, protocolos (como TCP y UDP) y el flujo de datos a través de la red.

Conceptos Fundamentales:

Flujo Básico para un Servidor TCP:

  1. Crear un socket: Se crea un objeto socket utilizando socket.socket(socket.AF_INET, socket.SOCK_STREAM). AF_INET indica que se utilizará la familia de direcciones IPv4, y SOCK_STREAM indica que se utilizará TCP.
  2. Asociar el socket a una dirección y puerto: Se utiliza el método bind((host, port)) para asociar el socket a una dirección IP y un número de puerto específicos en la máquina del servidor.
  3. Escuchar las conexiones entrantes: Se utiliza el método listen(backlog) para habilitar el socket para que acepte conexiones entrantes. El argumento backlog especifica el número máximo de conexiones en espera.
  4. Aceptar una conexión: Cuando un cliente intenta conectarse, el servidor utiliza el método accept() para aceptar la conexión. Este método devuelve un nuevo objeto socket que representa la conexión con el cliente y la dirección del cliente.
  5. Comunicarse con el cliente: Se utilizan los métodos recv(bufsize) para recibir datos del cliente y sendall(bytes) para enviar datos al cliente a través del nuevo socket de conexión.
  6. Cerrar la conexión: Una vez que la comunicación ha terminado, se utiliza el método close() para cerrar la conexión con el cliente. El socket del servidor principal puede seguir escuchando nuevas conexiones.

Flujo Básico para un Cliente TCP:

  1. Crear un socket: Similar al servidor, se crea un objeto socket utilizando socket.socket(socket.AF_INET, socket.SOCK_STREAM).
  2. Conectarse al servidor: Se utiliza el método connect((host, port)) para establecer una conexión con el servidor en la dirección IP y el puerto especificados.
  3. Comunicarse con el servidor: Se utilizan los métodos sendall(bytes) para enviar datos al servidor y recv(bufsize) para recibir datos del servidor.
  4. Cerrar la conexión: Una vez que la comunicación ha terminado, se utiliza el método close() para cerrar la conexión.

Ejemplo Simple de un Servidor TCP:

Python
 
import socket

HOST = '127.0.0.1'  # Dirección IP del localhost
PORT = 65432        # Puerto a escuchar (puertos no privilegiados son > 1023)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    print(f"Servidor escuchando en {HOST}:{PORT}")
    conn, addr = s.accept()
    with conn:
        print(f"Conectado por {addr}")
        while True:
            data = conn.recv(1024)
            if not data:
                break
            print(f"Recibido: {data.decode()}")
            conn.sendall(data)  # Envía los mismos datos de vuelta al cliente

Ejemplo Simple de un Cliente TCP:

Python
 
import socket

HOST = '127.0.0.1'  # La dirección IP del servidor
PORT = 65432        # El puerto que está escuchando el servidor

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    mensaje = "¡Hola, servidor!"
    s.sendall(mensaje.encode())
    data = s.recv(1024)
    print(f"Recibido del servidor: {data.decode()}")

Puntos Importantes: