Sockets
Python
Section titled “Python”Resumen
Section titled “Resumen”Los sockets permiten la comunicación entre computadoras o procesos a través de una red (como Internet o una LAN).
Python ofrece el módulo socket para manejar conexiones TCP (orientadas a conexión) y UDP (sin conexión).
TCP (Transmission Control Protocol)
Section titled “TCP (Transmission Control Protocol)”- Conexión establecida entre cliente y servidor (3-way handshake).
- Garantiza entrega, orden y fiabilidad.
- Ideal para chats, transferencias, HTTP, etc.
Servidor TCP
Section titled “Servidor TCP”import socket
HOST = '127.0.0.1' # Dirección localPORT = 5000 # Puerto del servidor
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) # Asociar dirección y puerto s.listen() # Escuchar conexiones print("Servidor TCP esperando conexión...") conn, addr = s.accept() # Aceptar cliente with conn: print("Conectado a:", addr) while True: data = conn.recv(1024) # Recibir datos if not data: break print("Cliente dice:", data.decode()) conn.sendall(b"Mensaje recibido")Cliente TCP
Section titled “Cliente TCP”import socket
HOST = '127.0.0.1'PORT = 5000
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) s.sendall(b"Hola servidor TCP") data = s.recv(1024) print("Servidor responde:", data.decode())UDP (User Datagram Protocol)
Section titled “UDP (User Datagram Protocol)”- No hay conexión, se envían “paquetes” sin confirmar recepción.
- Más rápido pero menos confiable.
- Ideal para streaming, juegos, mensajes cortos.
Servidor UDP
Section titled “Servidor UDP”import socket
HOST = '127.0.0.1'PORT = 6000
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.bind((HOST, PORT)) print("Servidor UDP esperando mensajes...") while True: data, addr = s.recvfrom(1024) print("Mensaje de", addr, ":", data.decode()) s.sendto(b"Mensaje recibido", addr)Cliente UDP
Section titled “Cliente UDP”import socket
HOST = '127.0.0.1'PORT = 6000
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.sendto(b"Hola servidor UDP", (HOST, PORT)) data, _ = s.recvfrom(1024) print("Servidor responde:", data.decode())Diferencias rápidas
Section titled “Diferencias rápidas”| Aspecto | TCP (SOCK_STREAM) | UDP (SOCK_DGRAM) |
|---|---|---|
| Conexión | Sí (handshake) | No |
| Fiabilidad | Garantiza entrega y orden | Puede perder o desordenar paquetes |
| Velocidad | Más overhead | Más ligero / rápido |
| API típica | listen, accept, connect, sendall, recv | sendto, recvfrom |
| Uso típico | HTTP, chats, transferencias | Streaming, DNS, juegos |