Programación Avanzada – Curso 2003 / 2004 – Práctica obligatoria CLIENTE / SERVIDOR de FTP COMENTARIOS • • • • • • La práctica es individual. Todas las prácticas entregadas deben ser totalmente funcionales. ¡No se corregirán prácticas que no funcionen!. La práctica se valorará sobre 10 puntos. Para aprobar la práctica, será necesario obtener una calificación >= 5. Las prácticas dudosas deberán ser defendidas ante el profesor. (Se habilitará un aula y un horario para la defensa). Se deberá entregar documentación impresa que incluirá: - Portada e índice de la documentación. - Manual de usuario de la aplicación comentando los comandos implementados, (se deberán documentar en un punto separado las ampliaciones realizadas). - Manual del programador comentando aspectos relevantes de la aplicación: cómo se realiza la trasmisión de ficheros, clases y métodos de especial relevancia, etc. - Código fuente impreso. Deberá acompañar a la documentación impresa un disquete de 3½ con la siguiente estructura de directorios: A:\------ alumno.txt (nombre, DNI, grupo de prácticas, ¿repetidor? SI/NO). - notas.txt (cualquier aclaración que se desee hacer constar). - proa0304.doc (fichero de documentación). - cFTP <DIR> (ficheros del cliente de ftp). - sFTP <DIR> (ficheros del servidor de ftp). - sLOG <DIR> (ficheros del servidor de logs). - ayuda <DIR> (ficheros generados con javadoc). OBJETIVO El objetivo es desarrollar un conjunto de dos aplicaciones (cliente y servidor) que posibiliten la transmisión de ficheros entre máquinas distintas (FTP simplificado). La ejecución de los programas cliente y servidor será como sigue: java ServidorFTP <puerto> java ClienteFTP <direccion_de_destino> <puerto> REQUISITOS MÍNIMOS El servidor de FTP debe ser no bloqueante, se implementará utilizando programación multihilo (deberá dar servicio a múltiples clientes conectados al mismo tiempo). Se utilizará el entorno MS-DOS para su ejecución. Como referencia puede servir el comando FTP del sistema operativo Windows. Se deberán implementar obligatoriamente los siguientes comandos: PUT <nombre_de_archivo> Copia al servidor el fichero especificado. GET <nombre_de_archivo> Copia en el cliente el fichero especificado. RCD <ruta_relativa_de_directorio> Remote CD. Cambia en el servidor el directorio por defecto. Sin parámetros muestra el directorio actual. “RCD ..” sube un nivel en la jerarquía de directorios. LCD <ruta_relativa_de_directorio> Local CD. Cambia en el cliente el directorio por defecto. Sin parámetros muestra el directorio actual. “LCD ..” sube un nivel en la jerarquía de directorios. RMD < directorio> Remote MD. Crea el directorio especificado en el directorio actual de la máquina remota. LMD <directorio> Local MD. Crea el directorio especificado en el directorio actual la máquina local. RDIR Remote DIR. Muestra un listado de archivos y directorios del directorio actual del servidor. LDIR Local DIR. Muestra un listado de archivos y directorios del directorio actual del cliente. HELP Lista los comandos implementados. HELP <comando> devuelve ayuda concreta sobre el comando seleccionado. EXIT Termina la sesión con el usuario actual. El servidor FTP se comunicará mediante RMI con un servidor de logs que mantendrá una base de datos utilizando JDBC y mySQL. El nombre de la base de datos será serv_ftp, y tendrá la siguiente estructura inicial: # MySQL dump 8.9 # # Table structure for table 'logs' CREATE TABLE logs ( comando char(50) ); # Table structure for table 'users' CREATE TABLE users ( usuario char(10), password char(10) ); El servidor sólo debe dar servicio a usuarios registrados, para ello se deberá implementar un comando de identificación de usuario: LOGIN <login_usuario> <password_usuario> Chequea en la base de datos serv_ftp, si existe una entrada en la tabla users con el usuario y la password suministrados. Cuando un usuario autorizado entra en el sistema, el directorio actual del servidor debe ser sFTP\<login_usuario>. Si este directorio no existiera, deberá crearse. No se deberá permitir al usuario navegar por directorios superiores a su directorio raiz. Para cada comando que ejecute el servidor FTP, se comunicará con el servidor de logs que añadirá una entrada en la tabla logs de la base de datos serv_ftp con la siguiente información: usuario;fecha_y_hora;comando_ejecutado En concreto, cuando un usuario intente conectarse (comando login) se deberá incluir una entrada en la tabla logs de la base de datos serv_ftp con la siguiente información: usuario;fecha_y_hora;password_suministrada ARQUITECTURA DEL SISTEMA THREADS put, ... Cliente de FTP SOCKETS get, ... check login Servidor de Logs JDBC Servidor de FTP write log RMI SERV_FTP STREAMS POSIBLES AMPLIACIONES Se valorará positivamente (incremento de la nota base) cualquier ampliación a los requisitos mínimos especificados. Las posibles ampliaciones a realizan son: 1. Ampliación del rango de comandos permitidos: - RVIEW y LVIEW <nombre_de_archivo>: Visualiza por pantalla el contenido del fichero. - RDEL y LDEL <nombre_de_archivo_o_directorio>: Borra el archivos o directorio especificado. - RREN y LREN <nombre_de_archivo_o_directorio> <nuevo_nombre>: Cambia el nombre del archivo o directorio especificado. 2. Implementación del comando SYNCHRONIZE. Permite para los 2 directorios actuales (local y remoto) tener siempre las versiones más recientes de los ficheros. No es recursivo. 3. Impresión de estadísticas sobre transmisión de ficheros, (tamaño, velocidad de transferencia, tiempo estimado de finalización). La información suministrada debe ser adaptativa. 4. Implementación de un usuario especial en el servidor (login root) que puede realizar labores de administración (borrar las entradas de la tabla de logs, borrar o insertar usuarios, listar logs y usuarios, etc). CALIFICACIÓN La nota de la práctica que implemente los requisitos mínimos es un 6. Cada ampliación de las comentadas en el punto anterior suma 1 punto más. CONSIDERACIONES ADICIONALES • El correcto funcionamiento de la práctica se probará en el propio disquete que entregue el alumno. • No es necesario copiar en el disquete la base de datos (serv_ftp) ni el controlador JDBC para mySQL, puesto que estarán correctamente instalados y configurados en el ordenador destinado la evaluación de las prácticas. • Las prácticas que no respeten la estructura de directorios del disquete NO SERÁN EVALUADAS. • La fecha tope para al entrega de prácticas vendrá establecida por el día y la hora del examen teórico de la asignatura en cada convocatoria.