Comandos
vcCS
Servidor del Video Club
vcUser:
Cliente del Video Club
Sintaxis
vcCS <puerto usuario> <puerto programación>
<puerto envío de videos>
vcUser <nombre de máquina del servidor><puerto
de usuario>
vcAdmin <nombre de máquina del servidor><puerto
de administración>
vcVRS <puerto de recepción
de videos>
Archivos Relacionados: videos.txt, listavideos.h
Este sistema permite realizar programaciones a pedido, y enviar videos
a destino. El servidor maneja una lista de videos con sus duraciones contenida
en el archivo videos.txt. El formato de este archivo es
<nªvideo> ^<nombre>^<minutos>^<ruta de acceso>
El cliente tiene 4 opciones:
- Listar los videos disponibles(videos.txt) : Se lista:
Número del video
Nombre del Video Duración
- Ver los videos ya programados. Se lista:
Número de video
Nombre del Video Hora de salida
al aire
Además se indica cual está siendo transmitido
actualmente. En este caso la salida indica en el aire
hace XXX minutos en la columna Hora de salida al
aire.
- Programar un video: en este caso, el cliente debe ingresar además
el número de video que desea ver, la hora máxima en
que puede ser programado, correo electrónico del usuario
y máquina de destino del video
- Salir
Por otra parte, en la máquina de destino debe estar corriendo
el programa vcVRS, que se encarga de almacenar el video enviado por el
servidor
Finalmente, a través del programa vcAdmin se puede ingresar
remotamente al servidor para cambiar la lista de videos disponibles, agregando
o quitando videos de videos.txt.
programa vcCS
El servidor cumple con las siguientes funciones:
-
Crea sockets para atender conexiones de usuario y administracion
-
Espera conexiones remotas y atiende sus requqerimientos
-
Lee el archivo video.txt y lo descompone en los nombres de los videos y
las duraciones de cada video en segundos. Estos datos son guardados en
arreglos
-
Modifica el archivo video.txt en base a los cambios recibidos desde el
administrador
-
Lee las opciones ingresadas en el cliente, y le devuelve los datos necesarios.
-
Modifica la programación en base a los datos ingresados por
el cliente
-
Mantiene actualizada la programación, chequeando periodicamente
si hay videos finalizados
-
Envía los videos a los destinos
-
Envía un mail notificando el envío
Para realizar esto el servidor cuenta con varias funciones
:
-
función main: crea los sockets y espera conexiones.
Se utiliza un ciclo infinito que contiene la función select con
un tiempo de espera de 60 segundos. Si no hay conexiones en ese tiempo,
el programa chequea si es necesario enviar un video. No se producen retardos
en el envío mayores a 1 minuto. Si hay actividad en los sockets
se tienen 2 opciones: si es una conexion nueva, se acepta la conexión
y se crea un nuevo socket para atenderla. si es una conexión existente,
se
atiende su requerimiento mediante la función adecuada.
-
función Echoserve: Atiende las conexiones de
administración. Lee primero la opción ingresada por el administrador.
Luego envía la información de videos disponibles. Esta información
se carga desde el archivo video.txt hacia la estructura videos.
Esta estructura se define en el archivo listavideo.h, y contiene
campos para os nombres, números, duraciones y rutas de acceso. Si
se ingresa la opción uno, la función retorna luego de enviar.ya
que el Admin. sólo está solicitando la lista de videos. Si
la opción es otra, entonces significa que el administrador hará
modificaciones, por lo que se espera que se retorne una estructura videos
modificada, la cual es transcrita al archivo videos.txt
-
función Echoserve2: se encarga de atender a los usuarios.
Priemro recibe la opción ingresada por el usuario. Si esta es 1,
envía la estructura videos y retorna. Si es 2, entra a la función
m_prog, la cual envía los videos programados al cliente. Si la opción
es 3, se entra a la función programa que se encarga de gestionar
las peticiones de programación.
-
función programa: se encarga de ingresar las
peticiones de los clientes a la programación. La programación
es almacenada en la estructura prog, definida también
en listavideo.h . prog contiene
el arreglo arreglo 2-D progra, el cual tiene 4 columnas. Cada columna representa:
1.- número del video pedido
2.- hora de inicio de la Tx
3.- Hora término de la Tx
4.- Hora máxima en la que se puede transmitir
Las horas se almacenan en segundos a partir de las 0:00 del 1/1/1970.
Además, programa cuenta modifica también
los arreglos usuarios y paths de prog, los cual contienen los usuarios
y las rutas de acceso asignados a cada petición
Por defecto, programa ordena las peticiones en forma FCFS, programando
cada petición lo más pronto posible
Al cliente se le envía la hora en que se programó su video
-
función m_prog: se encarga de mostrar al cliente los
videos ya programados.Utiliza el arreglo progra de la estructura
prog, que contiene la programación, y básicamente transforma
a texto la información contenida en el arreglo . Este texto
es enviado a través del socket al cliente
-
función actualiza: se encarga de actualizar el arreglo
prog.progra, chequeando si hay películas ya terminadas. si las hay,
las elimina de la programación, y actualiza el arreglo
-
función enviavideo:Esta funcion envía
el video a la máquina de destino. Primero chequea si es necesario
transmitir. Para esto, revisa primero si hay videos programados. Si los
hay, revisa si el video que se deberia estar transmitiendo (el primero
en la lista de programación) es el que el programa tiene almacenado
como el último video en transmisión (cuyos datos están
almacenado en el arreglo videotx) . Si es el mismo, entonces no se hace
nada. Si es distinto, significa que la transmisión del video anterior
finalizó, y que hay que transmitir el que ahora debería
estar en transmisión. Entonces, se actualiza el arreglo videotx,
y luego se realiza un fork. El programa padre vuelve al main a atender
las conexiones. el hijo crea un socket para transmitir al destino, abre
el archivo de video y comienza a transmitirlo en bloques. Una vez terminada
la transmisión, entra a la función enviamail, la cual
envia un mail al usuario avisando la transmisión exitosa del video
programa vcUser
El programa del usuario básicamente recoge las opciones del usuario,
las envía al servidor, y despliega en pantalla los datos enviados
por este
En base a los argumentos ingresados al ejecutar el programa, este construye
el socket usado para comunicarse con el servidor, y luego trata de conectarse
a este.
El programa comienza desplegando un menú, y pidiendo una opción
al usuario.
La opción ingresada es enviada al servidor.
Para las dos primeras opciones , el cliente luego espera los datos
enviados por el servidor y los despliega en pantalla. En el primer caso,
recibe una estructura del tipo videos con los videos disponibles.
A partir de esta estructura el programa sintetiza la información
que despliega en pantalla. En el segundo caso, se muestra la programación
directamente desde el buffer recibido.
Para la opción 3, el cliente pide al usuario que ingrese el
numero de video, la fecha máxima en que se puede programar la petición
(en formato Nºvideo/mes/dia/hora/minutos/correoelectrónico).
Por ejemplo para ingresar el video 1 para el 5 de octubre a las 10:00 am
se debe ingresar:
1/10/5/10/00/zero@elo.utfsm.cl
Luego, se solicita la máquina a la que se debe enviar el video
programado
programa vcAdmin
Este programa permite que un administrador se conecte en forma remota y
efectue cambios en los videos disponibles.
En base a los argumentos ingresados al ejecutar el programa, este construye
el socket usado para comunicarse con el servidor, y luego trata de conectarse
a este.
El administador tien tres opciones. Al ingresarla, esta se envía
al servidor y este retorna una estructura del tipo videos que contiene
la información actual del archivo video.txt.
Si se ingresa la opción 1, se despliegan los datos en pantalla
como en el programa anterior. Si se ingresa la opción 2, se
pregunta los datos del nuevo video a ingresar y se modifica la estructura
videos.
Si se ingresa la opción 3, se pregunta que video se desea eliminar
y se modifica la estructura videos. en estos dos casos, se envía
de vuelta la estructura videos al servidor, lo que permite a este modificar
el archivo videos.txt.
programa vcVRS
Este programa recibe el video desde el servidor. Crea primero un
socket y espera conexion desde el servidor. Al producirse la conexión,
crea un archivo llamado videorecibido donde se almacena la información
a medida que va llegando. Luego, al terminar la transmición, cierra
el archivo, los sockets y termina.
A continuación se muestra un diagrama de los programas y su interacción