¿Qué es import socketserver en Python y cómo funciona?

| Última modificación: 28 de enero de 2025 | Tiempo de Lectura: 3 minutos

El módulo de import socketserver es una de las opciones que se usan para crear servidores en Python, ya que brinda una herramienta sencilla que nos facilita el manejo de conexiones de red. Import socketserver es una forma eficiente de crear servidores para aplicaciones que gestionen múltiples clientes, y dada su importancia, el día de hoy te queremos explicar cómo funciona.

import socketserver

¿Qué es import socketserver?

El módulo de import socketserver es un marco que se diseñó con la intención de simplificar la creación de servidores de red. El propósito de esta función es gestionar la comunicación entre el servidor y los clientes y permmitirte así centrarte en la lógica específica de tu aplicación, sin tener que preocuparte por detalles técnicos, como son los sockets.

Este módulo nos ofrece cuatro clases distintivas que cubren diferentes necesidades:

  • TCPServer: maneja conexiones usando el protocolo TCP, ideal para flujos de datos continuos.
  • UDPServer: utiliza el protocolo UDP para trabajar con paquetes de datos.
  • UnixStreamServer: similar a TCPServer pero para sistemas Unix.
  • UnixDatagramServer: una versión basada en UDP para sistemas Unix.

Estas clases se combinan con los manejadores de solicitudes que tú defines para procesar los datos recibidos de los clientes.

¿Cómo crear un servidor con socketserver?

Crear un servidor con ayuda de import socketserver es muy simple. Veamos el ejemplo del un servidor TCP básico que puede recibir mensajes de los clientes y los devuelve en mayúsculas:

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(1024).strip()
print(f"Recibido de {self.client_address[0]}: {self.data}")
self.request.sendall(self.data.upper())

if __name__ == "__main__":
HOST, PORT = "localhost", 9999
with socketserver.TCPServer((HOST, PORT), MyTCPHandler) as server:
print("Servidor corriendo en el puerto 9999...")
server.serve_forever()

En este código, defines un manejador personalizado heredando de BaseRequestHandler y redefiniendo el método handle. Luego creas un servidor TCP usando TCPServer, especificando la dirección y el manejador, y lo ejecutas con serve_forever para que esté activo continuamente.

🔴 ¿Quieres Aprender a Programar con Python? 🔴

Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semana

Si necesitas manejar múltiples clientes simultáneamente, puedes usar mixins como ThreadingMixIn o ForkingMixIn para que cada solicitud se gestione en un hilo o proceso separado. Veamos un ejemplo con hilos:

import socketserver
import threading

class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass

class MyThreadedHandler(socketserver.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(1024).strip()
print(f"Recibido: {self.data}")
self.request.sendall(self.data.upper())

if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = ThreadedTCPServer((HOST, PORT), MyThreadedHandler)
with server:
print("Servidor con hilos corriendo...")
server.serve_forever()

Esto permite que tu servidor sea más eficiente al atender varias conexiones simultáneamente.

¿Cuándo usar TCP o UDP?

La clase TCP es determinante en aplicaciones en las que necesitas una comunicación estable y continua, como servicios de chat o transferencia de archivos. UDP, en cambio, es más ligero y rápido, aunque menos confiable, loi cual hace que sea útil para aplicaciones como juegos en línea o streaming.

Analicemos un ejemplo de un servidor UDP básico:

import socketserver

class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
data = self.request[0].strip()
socket = self.request[1]
print(f"Recibido: {data}")
socket.sendto(data.upper(), self.client_address)

if __name__ == "__main__":
HOST, PORT = "localhost", 9998
with socketserver.UDPServer((HOST, PORT), MyUDPHandler) as server:
print("Servidor UDP corriendo...")
server.serve_forever()

Si quieres aprender más sobre programación y tecnología o quieres cambiar tu futuro laboral, no dudes en suscribirte al bootcamp de programación desde cero, en el cual aprenderás sobre temáticas relacionadas con este mundillo para que te sumerjas rápidamente en las aguas de la programación y puedas seguir escalando hacia tu meta. ¡Apúntate ahora y comienza tu camino hacia un futuro lleno de oportunidades!

Posts más leídos

¡CONVOCATORIA ABIERTA!

Aprende a programar desde cero

Full Stack JR. Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado