Sockets en Python: Guía completa para trabajar con conexiones de red

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué son los sockets en Python y cómo funcionan?

Un socket es una interfaz de software que permite la comunicación bidireccional entre dispositivos en una red informática. Funciona como un conector virtual a través del cual las aplicaciones pueden enviar y recibir datos por la red.

Las aplicaciones de red modernas utilizan sockets en Python para crear todo tipo de sistemas. Desde mensajería instantánea hasta juegos en línea y servicios de intercambio de datos — todos emplean la comunicación en red mediante sockets.

Conceptos fundamentales de la programación de redes

Para trabajar con sockets en Python es necesario comprender estas ideas clave:

  • Dirección IP — identificador único de un dispositivo en la red
  • Puerto — número que identifica un servicio específico en el dispositivo
  • TCP (Transmission Control Protocol) — protocolo confiable de transmisión de datos
  • UDP (User Datagram Protocol) — protocolo rápido sin confirmación de entrega

TCP garantiza la entrega de datos con control de errores. UDP es más rápido pero no asegura que los mensajes lleguen a su destino.

Configuración e importación del módulo socket

El módulo socket forma parte de la librería estándar de Python. Para empezar a usar sockets solo necesitas importarlo:

import socket

No se requieren instalaciones adicionales. La librería socket está disponible en todas las versiones de Python por defecto.

Creación de un servidor TCP en Python

Implementación básica del servidor

Un servidor TCP acepta conexiones de clientes y procesa sus solicitudes. Veamos una implementación sencilla:

import socket

# Creación del socket TCP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Vinculación a dirección y puerto
server_socket.bind(('localhost', 12345))

# Inicio de escucha (máximo 5 conexiones en cola)
server_socket.listen(5)

print("Servidor iniciado. Esperando conexiones...")

while True:
    # Aceptación de conexión
    client_socket, address = server_socket.accept()
    print(f"Conexión desde {address}")
    
    # Recepción del mensaje
    message = client_socket.recv(1024).decode('utf-8')
    print(f"Mensaje recibido: {message}")
    
    # Envío de respuesta
    client_socket.send("¡Saludos desde el servidor!".encode('utf-8'))
    
    # Cierre de conexión con el cliente
    client_socket.close()

Entendiendo el flujo de trabajo del servidor

En el código anterior ocurren las siguientes operaciones:

  1. Se crea un socket utilizando el protocolo TCP
  2. El servidor se vincula a la dirección localhost y al puerto 12345
  3. Se inicia la espera de conexiones de clientes
  4. Cuando un cliente se conecta, se recibe su mensaje
  5. El servidor envía una respuesta y cierra la conexión

El método socket.AF_INET indica el uso de IPv4, mientras que socket.SOCK_STREAM especifica el protocolo TCP.

Desarrollo de un cliente TCP

Un cliente TCP se conecta al servidor e intercambia datos con él. Ejemplo de implementación del cliente:

import socket

# Creación del socket cliente
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Conexión al servidor
client_socket.connect(('localhost', 12345))

# Envío de mensaje
client_socket.send("¡Hola, servidor!".encode('utf-8'))

# Recepción de respuesta
response = client_socket.recv(1024).decode('utf-8')
print(f"Respuesta del servidor: {response}")

# Cierre de conexión
client_socket.close()

El cliente ejecuta una secuencia de acciones: conexión, envío de datos, recepción de respuesta y cierre de conexión.

Trabajo con el protocolo UDP

UDP ofrece una forma más rápida de transmitir datos sin garantías de entrega. Esto lo hace ideal para aplicaciones en tiempo real.

Servidor UDP


                    

Blogs

Book Recommendations