Tarea 3: Video Club Usando Sockets

Descripción del problema:

Comandos
    vcCS:       Servidor Central del Video Club
    vcVRS:    Servidor de Recepción de Videos
    vcUser:    Aplicación cliente para que el usuario interactue con el servidor Central del video Club
    vcAdmin: Aplicación cliente para la administración

Sintaxis
   vcCS   <Puerto para aceptar Usuarios XXX> <Puerto para aceptar alAdministrador ZZZ><Puerto acceder a Servidores de recepción YYY>
   vcVRS  <Puerto para aceptar al Servidor Central YYY>
   vcUser <nombre máquina Servidor Central> <Puerto para acceder al Servidor Central XXX>
    vcAdmin <nombre máquina Servidor Central> <Puerto para acceder al Servidor Central ZZZ>

    Archivos Relacionados: videos.txt

Descripción


Obs. En esta figura vc aparece como cv.

El escenario asume que el servidor central corre practicamente en forma permanente. Escucha conexiones en dos puertos (XXX  y ZZZ). En XXX acepta conexiones de usuarios que llegan desde computadores remotos usando el cliente vcUser. El Servidor central también recibe conexiones desde el cliente vcAdmin. Por otro lado existe un número de Servidores de Recepción de Videos vcVRS corriendo en otros lugares. Todas las conexiones son TCP.


Contenido:

El presente directorio contiene los siguientes archivos:
vcCS.c                Archivo del servidor central.
vcUser.c             Archivo con el programa de usuario.
vcAdmin.c           Archivo con el porgrama del Administrador.
vcVRS                 Archivo del programa de recepción de videos.
cvs.h                    Archivo con las librerias a incluir y las definiciones de los nuevos tipos usados.
cvsfun.c               Archivo con las funciones utilizadas.
makefile               Archivo para la compilación.
videos.txt             Archivo de ejemplo con la programación de videos.
Readme.html        Archivo con la documentación del problema.
archivos gif y jpg Dibujos de la documentación.

Compilación:

    Para compilar el programa se debe ejecutar en el directorio donde se encuentran los archivos
>make
    Con lo cual se generan dos archivos ejecutables vcCS, vcUser, vcAdmin y vcVRS . Para eliminar los archivos .o creados en la compilacion basta ejecutar
>make clean
    Si se desea eliminar ademas los archivos ejecutables se debe ejecutar
>make all

Sobre la ejecución:

Se debe ejecutar primero vcCS (servidor), este recibe 3 parámetros: <puerto vcUser> <puerto <vcAdmin>  <vcVRS> .
Luego se ejecuta vcUser o vcAdmin cualquiera de los dos requiere dos parámetros, <nombre host> <puerto respectivo>. Se recomienda ejecutar vcVRS antes de programar un video con vcUser ya que el servidor intentará enviar el video apenas se realice la petrición.
Para ejecutar vcVRS se debe entregar como parámetro el puerto correspondiente.
Si el path no esta bien configurado se debera anteponer ./ a los comandos antes mencionados, por ejemplo para ejecutar ser se debera tipear:

>./vcCS  <puerto vcUser> <puerto <vcAdmin>  <vcVRS>
>./vcUser <nombre host> <puerto vcUser>
>./vcAdmin <nombre host> <puerto vcAdmin>
>./vcVRS <puerto vcVRS>

Para la ejecución de todos los módulos dentro de la maquina local se debe asignar como nombre de host "localhost", los puertos asignados pueden generar conflictos con otros ya utilizados, se recomiendo el uso de numeros altos, un ejemplo de ello son los puertos 12345, 12346 y 12347 que son los puertos con los cuales se realizaron las pruebas.

Nota: Si no se esta ejecutando vcVRS cuando vcCS desea enviar el video, este último términa su ejecución.

Funcionamiento:

En el siguiente diagrama se puede ver como funciona el servidor vcCS

A continuación se mustra el esquema de funcionamiento de vcVRS y un esquema con el funcionamiento de  vcUser y vcAdmin el cual, en forma general es el mismo:

Funcionamiento:

vcCS realiza tres grandes tareas, atiede las peticiones generadas por los usuarios conectados a través de vcUser, los cuales pueden ser más de dos, atiende las peticiones del Administrados (uno) y envia videos. La solicitudes de despliegue de datos son satisfechas enviando las estructuras que contienen dicha informacion al repectivo cliente el cual es el encargado de desplegarla en pantalla.

Todas estas funciones son realizadas iterando entre una actividad y la otra, para el envio de los videos se genera un proceso hijo el cual esta permanentemente enviando paquetes con el video, lo cual permite que el padre pueda seguir atendiendo nuevas peticiones. El archivo es enviado codificado en base64 lo cual permite transmitir la información como si se tratara de caracteres. Para el archivo de ejemplo videos.txt se envia el archivo ejecutable vcCS.

vcUser y vcAdmin generan peticiones a vcCS el cual distingue entre distintos usuarios y administrador porque asigna distintos sockets para cada uno.

vcAdmin además de las opcines solicitadas por las especificaciones permite listar los videos actualmente programados.

vcVRS reliza los seteos de conexión y se queda bloqueado esperando por la llegada del video. Una vez establecida la coneccion, procede a guardar el ideo en un archivo temporal el cual luego decodifica y elimina, asignandole el nombre que tenía originalmente el archivo. Si ud desea generar su porpio archivo videos.txt en este los nombres de los archivos no deben contener espacios en blanco y contener la respectiva extensión si fuese necesario para su sistema. Por ejemplo la película "Lo que el viento se llevo" debe ser listada como "Lo_que_el _viento_se_llevo.mov"

Si mientras el hijo de vcCS esta enviando un video un usuario solicita un nuevo video este es encolado, esto nunca sucederá si se envian archivos pequeños ya que vcCS envía el primer archivo apenas es solicitado y una vez satisfecho el requerimiento esta solicitud es eliminada del sistema, con lo cual un nueva petición quedará al comienzo de la cola.

Mejoras:

Mejoras realizables son las siguientes:
· Mejor escritura del código, dividido en funciones y en  lo posible estas en un archivo aparte como lo es cvsfun.c
· Dar a vcUser  la posebilidad de un término más "elegante" si vcCS se apaga.


Alvaro Patricio Arenas Ramos       9721033-0
mailto:aarenas@alumnos.utfsm.cl