Un esquema cliente-servidor con sockets en Python se utiliza para permitir la comunicación entre dos programas: uno que actúa como servidor y otro que actúa como cliente. Este esquema se basa en el uso de sockets, que son puntos de comunicación para enviar y recibir datos a través de una red.
Servidor:
Cliente:
A continuación, te muestro un ejemplo básico para implementar un esquema cliente-servidor con sockets en Python.
import socket
def servidor():
# Crear un socket de servidor (IPv4, TCP)
servidor_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Asociar el socket a una dirección y puerto
servidor_socket.bind(("127.0.0.1", 12345))
print("Servidor iniciado y escuchando en 127.0.0.1:12345")
# Escuchar conexiones entrantes
servidor_socket.listen(5) # Permitir hasta 5 conexiones en cola
while True:
# Aceptar una conexión
cliente_socket, direccion = servidor_socket.accept()
print(f"Conexión aceptada de {direccion}")
# Recibir datos del cliente
mensaje = cliente_socket.recv(1024).decode("utf-8")
print(f"Mensaje recibido: {mensaje}")
# Enviar respuesta al cliente
respuesta = f"Hola, cliente desde {direccion}. Mensaje recibido: {mensaje}"
cliente_socket.send(respuesta.encode("utf-8"))
# Cerrar la conexión con el cliente
cliente_socket.close()
# servidor()
import socket
def cliente():
# Crear un socket de cliente (IPv4, TCP)
cliente_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Conectar al servidor en la dirección y puerto especificados
servidor_direccion = ("127.0.0.1", 12345)
cliente_socket.connect(servidor_direccion)
# Enviar un mensaje al servidor
mensaje = "Hola, servidor"
cliente_socket.send(mensaje.encode("utf-8"))
print(f"Mensaje enviado al servidor: {mensaje}")
# Recibir respuesta del servidor
respuesta = cliente_socket.recv(1024).decode("utf-8")
print(f"Respuesta del servidor: {respuesta}")
# Cerrar el socket del cliente
cliente_socket.close()
# cliente()
socket.AF_INET
y socket.SOCK_STREAM
).asyncio
para manejar varias solicitudes en paralelo.1024
) según el tamaño esperado de los datos.