← Volver

Cómo crear una conexión TCP cliente/servidor

El módulo estándar socket provee una interfaz de bajo nivel para crear conexiones de tipo TCP y UDP. Para crear servidores con una interfaz de más alto nivel, véase el módulo estándar socketserver. Para proyectos medianos y grandes, considérense soluciones más completas como Twisted o gevent.

Ahora bien, para crear una conexión TCP necesitamos dos archivos: uno para el servidor y otro para el cliente. El servidor debe crear un objeto socket e indicar que escuchará peticiones en una dirección de IP (local o pública) y un puerto determinados.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import socket

# Crear el socket.
with socket() as s:
# Asociarlo a una dirección de IP y un puerto.
s.bind(("localhost", 6190))
# Indicar que este socket actuará como servidor.
s.listen()
# Esperar a la conexión del cliente.
print("Esperando al cliente...")
conn, address = s.accept()
print(f"address[0]:address[1] se ha conectado.")
# Esperar a que el cliente envíe datos.
while True:
data = conn.recv(1024)
# Chequear que no esté vacío.
if data:
# Imprimirlo en pantalla y cerrar el socket.
print("El cliente ha enviado:", data)
break

# El socket se cierra automáticamente al salir del bloque "with".
print("Conexión cerrada.")

Una vez ejecutado el servidor, debemos crear y ejecutar el cliente. Éste emplea la función create_connection() para conectarse al servidor y enviar datos a través de la conexión.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import create_connection

# Conectar al servidor.
with create_connection(("localhost", 6190)) as conn:
print("Conectado al servidor.")
# Enviar datos.
conn.sendall(b"Hola mundo!")

print("Conexión cerrada.")

Ambos puntos de la conexión pueden enviar y recibir datos vía los métodos sendall() y recv(n) (en donde n indica el tamaño del buffer en bytes, típicamente 1024).

¿Alguna duda sobre este código? ¡Preguntanos en el foro!