3 usuarios conectados

Redes y comunicación. Clientes y servidores

Comparte esto

Desarrollo de Servidores

Un servidor es una aplicación que espera conexiones de clientes y proporciona un servicio en respuesta a sus solicitudes. Aquí hay aspectos clave a considerar al desarrollar servidores:

1. Selección del Protocolo (TCP vs. UDP):

2. Enlace a una Dirección y Puerto (bind()):

3. Escucha de Conexiones (listen() - Solo TCP):

4. Aceptación de Conexiones (accept() - Solo TCP):

5. Comunicación con el Cliente (recv(), sendall()):

6. Manejo de Múltiples Clientes:

7. Cierre de Conexiones (close()):

Desarrollo de Clientes

Un cliente es una aplicación que inicia una conexión a un servidor para solicitar un servicio. Los aspectos clave incluyen:

1. Selección del Protocolo (TCP vs. UDP):

2. Creación del Socket:

3. Conexión al Servidor (connect() - Solo TCP):

4. Envío de Solicitudes (sendall(), sendto()):

5. Recepción de Respuestas (recv(), recvfrom()):

6. Cierre de la Conexión (close()):

Ejemplo de Servidor TCP Multi-hilo:

Python
import socket
import threading

HOST = '127.0.0.1'
PORT = 65432

def manejar_cliente(conn, addr):
    print(f"Conectado por {addr}")
    with conn:
        while True:
            data = conn.recv(1024)
            if not data:
                break
            print(f"[{addr}] Recibido: {data.decode()}")
            conn.sendall(f"Servidor recibió: {data.decode()}".encode())

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    print(f"Servidor multi-hilo escuchando en {HOST}:{PORT}")
    while True:
        conn, addr = s.accept()
        thread = threading.Thread(target=manejar_cliente, args=(conn, addr))
        thread.start()

En este ejemplo, cada vez que un cliente se conecta, se crea un nuevo hilo para manejar la comunicación con ese cliente, permitiendo que el servidor acepte nuevas conexiones simultáneamente.

El desarrollo de clientes y servidores implica comprender los protocolos de red, la funcionalidad del módulo socket y las técnicas para manejar la concurrencia en el lado del servidor.