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
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