Recién uno empieza a aprender Python, se da cuenta de que este es un lenguaje que tiene un módulo para prácticamente todas las ocasiones. La pregunta es: ¿también tiene uno para trabajar con redes y comunicación a bajo nivel? La respuesta se encuentra en el famoso módulo de import socket, una herramienta que nos permite comunicarnos con otros dispositivos a través de internet o redes locales. Hoy te quiero mostrar cómo funciona el import socket y cóm puedes sacarle todo el provecho.
¿Qué es el módulo socket en Python?
El módulo socket en Python es una implementación de la interfaz BSD socket, la cual permite la comunicación entre dispositivos por medio del uso de protocolos de red como lo son TCP e IP. Este módulo no solo simplifica el proceso de la creación de los sockets, sino que ademá sabstrae muchas de las complejidades que tenemos que enfrentar cuando trabajamos de forma directa con las API del sistema operativo.
Gracias a import socket podemos enviar y recibir datos a través de conexiones TCP, UDP e incluso realizar operaciones con sockets en capas más avanzadas, tales como protocolos CAN o bluetooth. El import socket es la manera en la que importas este módulo para poder usarlo en Python.
Para que sea más entendible, visualicemos el módulo socket como una central telefónica. Los “sockets” serían las líneas telefónicas, que conectan diferentes dispositivos (o personas) para enviar y recibir mensajes. La belleza de esta central telefónica radica en que puede gestionar múltiples conexiones a la vez y establece reglas claras para que cada llamada llegue a su destino correcto.
¿Cómo usar el módulo de import socket?
Algunas de las situaciones que podemos cubrir con el módulo de import socket son:
- Crear un socket básico: Un socket en Python se crea con la función socket.socket, especificando su familia (como IPv4 o IPv6) y su tipo (TCP o UDP):
import socket
# Crear un socket TCP/IPv4
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Con este código ya tienes un socket listo para usar.
- Enlazar un socket a una dirección: Para que un socket escuche en una dirección específica, necesitas usar bind:
s.bind(('127.0.0.1', 8080)) # Enlaza el socket al puerto 8080 en localhost
🔴 ¿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 semanaEste paso asegura que tu socket esté “esperando” en un puerto específico.
- Escuchar conexiones entrantes: Si estás construyendo un servidor, necesitas que tu socket escuche nuevas conexiones. Esto se hace con listen:
s.listen(5) # Escucha hasta 5 conexiones simultáneas
- Aceptar conexiones: Cuando un cliente intenta conectarse, puedes aceptarlo con accept:
conn, addr = s.accept()
print(f'Conexión establecida con {addr}')
Este método devuelve un nuevo socket (conn) para interactuar con el cliente.
- Enviar y recibir datos: Aquí es donde ocurre la magia. Con send y recv, puedes intercambiar datos:
# Enviar datos
conn.send(b'Hola, cliente')
# Recibir datos
data = conn.recv(1024)
print(f'Datos recibidos: {data}')
- Cerrar el socket: Finalmente, cuando hayas terminado de usar el socket, ciérralo:
s.close()
Esto libera los recursos del sistema asociados con el socket.
¿Qué podemos hacer con import socket?: algunos casos de uso
Ahora que entiendes la teoría, vamos a verificar algunos ejemplos de lo que puedes hacer con import socket.
- Servidor básico de eco: Un servidor de eco devuelve cualquier mensaje que reciba. Este es un excelente punto de partida para aprender sobre sockets:
import socket
HOST = '127.0.0.1'
PORT = 12345
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
print('Servidor escuchando...')
conn, addr = s.accept()
with conn:
print(f'Conexión establecida con {addr}')
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
- Cliente que se conecta al servidor de eco: Un cliente sencillo que se conecta a tu servidor de eco puede ser escrito así:
import socket
HOST = '127.0.0.1'
PORT = 12345
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'Hola, servidor')
data = s.recv(1024)
print(f'Recibido: {data}')
- Comunicación UDP: El protocolo UDP es útil para aplicaciones donde la velocidad es más importante que la confiabilidad, como juegos en tiempo real. Veamos un ejemplo:
import socket
# Crear un socket UDP
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Enviar un mensaje
s.sendto(b'Hola, UDP', ('127.0.0.1', 54321))
# Recibir respuesta
data, addr = s.recvfrom(1024)
print(f'Datos recibidos de {addr}: {data}')
s.close()
Si te interesa la programación y quieres seguir aprendiendo sobre temáticas similares a esta, no dudes en suscribirte a nuestro bootcamp en programación desde cero, con el cual adquirirás las habilidades necesarias para conseguir tu primer empleo tech. ¡No dudes de tomar esta oportunidad y da el siguiente paso hacia el éxito!