Estás en:   ArielOrtiz.com > Programación avanzada > Examen de tercer parcial

Examen de tercer parcial

Este examen puede ser elaborado de manera individual o en parejas.

Problema

Escribe en lenguaje C un servidor de reducción de imágenes PPM (Portable PixMap) y su respectivo cliente a partir de la siguiente arquitectura:

Cliente y servidor se ejecutan como procesos independientes y se comunican entre sí usando sockets. La interacción entre ambos se describe a continuación:

  1. El servidor debe correr de manera indefinida en su propia terminal. Debe recibir como argumento de la línea de comando el número de puerto en el que estará escuchando:

    $ ./servidor_reductor 9999
    Servidor de reducción de imágenes PPM
    Listo para recibir conexiones en el puerto 9999...
    
  2. Un cliente se debe ejecutar desde otra terminal. Como argumentos de la línea de comando debe recibir:

    • Dirección IP del servidor
    • Número de puerto
    • Nombre de archivo PPM de entrada
    • Nombre de archivo PPM de salida

    Por ejemplo:

    $ ./cliente_reductor 127.0.0.1 9999 entrada.ppm salida.ppm
    
  3. El cliente lee localmente el archivo de entrada y manda su contenido al servidor vía un socket.
  4. El servidor acepta una nueva conexión de socket y procesa la petición del cliente en un nuevo thread. Dicho procesamiento consiste en recibir el contenido del archivo enviado por el cliente y producir una nueva imagen PPM basada en la original pero reducida a la mitad del ancho y altura. La imagen resultante se envía de regreso al cliente usando el mismo socket.

    Dado que el procesamiento de la imagen ocurre en otro thread, el thread principal del servidor puede atender casi de manera inmediata cualquier nueva petición que pudiera llegar de otro cliente.

  5. El cliente recibe del servidor la imagen resultante y la guarda localmente usando el nombre del archivo de salida.

Cliente y servidor deben hacer todas las validaciones pertinentes y desplegar mensajes claros en caso de detectar cualquier tipo de error.

Referencias útiles

Todo el código que se requiere para resolver este examen fue visto en clase y/o está explicado en [GRIFFITHS]. Los principales capítulos a revisar son:

Entrega y revisión

Crea un archivo tarball llamado examen3.tgz con los archivos fuente de C, Makefile, imágenes de prueba, etc. No olvides poner los nombres de los autores en comentarios al inicio de los archivos fuente.

Se revisará en persona los programas funcionando el martes 6 de noviembre a la hora de clase. Antes de la revisión, sube el archivo tarball examen3.tgz al Sistema de Entrega de Tareas Automatizado (SETA). Basta que una persona del equipo lo suba.

Ponderaciones

40% Código del servidor.
30% Código del cliente.
25% Respuesta correcta a preguntas y/o solicitud de modificaciones.
5% Datos de los autores en comentarios al inicio de los archivos fuente.
DA Si se detecta cualquier tipo de plagio o fraude.