Salta el contingut
 

Exercicis: Protocols de comunicació

Joan Puigcerver Ibáñez

j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Objectius

Implementar un programa amb estructura client-servidor amb protocols de comunicació definits.

Requisits

La comunicació entre el client i el servidor es farà mitjançant sockets i la transmissió de missatges es realitzarà mitjançant enviament d'objectes serialitzats.

Tots els servidors han de ser capaços de gestionar múltiples clients simultàniament.

Estructura del codi font

El codi font de cada exercici ha d'estar contingut en un paquet dedicat.

Dins del paquet, cal definir els següents paquets:

  • client: Conté el codi font del client.
  • server: Conté el codi font del servidor.
  • models: Conté el codi font de les classes comunes (models, missatges, etc.).

Exercicis

1. Endevina el número

ud3.exercises.guess

Implementeu un servidor que permeta jugar a endevinar un número aleatori entre 1 i 1000.

Quan un client es connecte al servidor, aquest triarà un número aleatori entre 1 i 1000. El client haurà d'anar enviant números al servidor fins que encerte el número.

El servidor haurà de respondre amb els següents missatges:

  • TOO_LOW: El número enviat és massa baix.
  • TOO_HIGH: El número enviat és massa alt.
  • CORRECT: El número enviat és correcte.
  • INVALID: El número enviat no és vàlid (no està dins del rang definit).

Ampliació

Implementar la següent funcionalitat:

  • Possibilitat de tornar a jugar: Després d'encertar el número, el servidor pot oferir la possibilitat de tornar a jugar sense haver de tornar a connectar-se.
  • Limitar el nombre d'intents: El servidor pot limitar el nombre d'intents per endevinar el número. Si l'usuari supera aquest nombre, el servidor informarà que ha perdut i li mostrarà el número que havia de trobar.
  • Sistema de puntuació: El servidor implementarà un sistema de puntuació basat en el nombre d'intents realitzats per endevinar el número.
  • Pista: El servidor pot oferir una pista a l'usuari. Pot suposar una penalització en la puntuació final.

2. Servidor de temps

ud3.exercises.time

Implementeu una servidor que informe de l'hora i data actual a qualsevol client que ho demane.

Les peticions que pot rebre el servidor són:

  • TIME: Retorna l'hora actual.
  • DATE: Retorna la data actual.
  • DATETIME: Retorna la data i hora actual.

Totes les peticions poden contindre un paràmetre opcional indicant la zona horària a la qual es vol obtenir la data/hora. Si no s'indica cap zona horària, s'utilitzarà el Temps Universal Coordinat (UTC).

3. Aplicació de recordatoris

ud3.exercises.reminder

Implementeu una aplicació client/servidor de gestió de recordatoris per a múltiples usuaris. Per simplificar, no caldrà implementar un sistema d'autenticació robust, sinó que es podrà identificar-se simplement amb un nom d'usuari.

L'aplicació haurà de permetre les següents operacions:

  • Afegir un recordatori.
  • Llistar els recordatoris d'un usuari.
    • Aquesta operació haurà de permetre triar el nombre de registres a mostrar, sempre ordenats per data de venciment (primer els més propers a vèncer).
  • Eliminar un recordatori.
classDiagram
    class Reminder {
        - title: String
        - description: String
        - dueDate: Date
    }

4. Servidor de correu electrònic

ud3.exercises.email

Implementeu una aplicació client/servidor de gestió de correu electrònic.

El servidor ha de ser capaç de gestionar, emagatzemar i enviar correus electròncis entre diferents usuaris.

Per simplificar, no caldrà implementar un sistema d'autenticació robust, sinó que es podrà identificar-se simplement amb la direcció de correu electrònic.

L'aplicació haurà de permetre les següents operacions:

  • SEND: Envia un correu electrònic d'un usuari a un altre.
  • INBOX: Consulta el llistat de correus.
  • READ: Consulta la informació d'un correu electrònic.
  • DELETE: Elimina un correu electrònic del servidor.
classDiagram
    class Email {
        - sender: String
        - recipient: String
        - subject: String
        - message: String
        - date: Date
    }
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.