Socket
Laboratorio de Comunicación de Datos ITTT - Noviembre 2008
Práctica III
Arquitectura básica del servidor
Abre canal de comunicación (socket + bind)Lee orden UDP
¿Hay datos?
Crea el canal UDP para órdenes Mantiene una lista de sesiones abiertas y otra de transferencias activas En cada iteración
Comprueba si hay alguna orden encola. Si es así, la procesa Envía un bloque por cada transferencia activa
Procesa orden UDP
Procesa transferencias activas (1 bloque)
1
Práctica III
Arquitectura básica del cliente
Abrecanal de comunicación (socket + bind) Lee e interpreta orden de la entrada estándar (strtok) Envía orden al servidor y espera a recibir respuesta ¿Transferencia? Conecta con socket TCP proporcionadopor servidor Transferencia de datos
Crea el canal UDP para órdenes Interpreta (parsea) las órdenes recibidas por la entrada estándar Envía órdenes al servidor, y espera la respuesta. Si lasórdenes implican transferencia, conecta con el socket TCP que el servidor le asocia para transferir
Inicio de sesión
Inicio de sesión
El cliente envía un paquete OPEN (user, password) Elservidor verifica:
Que los datos del usuario son correctos Que no se ha alcanzado el número máximo de sesiones
El servidor responde con ACK o NACK según corresponda
2
Inicio de sesiónRecepción no bloqueante
Varios clientes acceden al servicio simultáneamente
Necesario comprobar en cada iteración si se han enviado órdenes Problema: recvfrom()se bloquea hasta que llegauna orden
Solución: hacer que el socket UDP sea no bloqueante
#include fcntl(socket, F_SETFL, O_NONBLOCK);
Si no hay datos en la cola del socket UDP, recvfrom()devuelve -1 con código de errorEAGAIN
Inicio de sesión
Envío de estructuras
TCP está orientado al envío de flujos de bytes no estructurados Cuando se intentan enviar flujos estructurados surgen problemas
¿Cómo se...
Regístrate para leer el documento completo.