Salta el contingut
 

Exercicis: Protocols de comunicació

Joan Puigcerver Ibáñez

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 fa mitjançant sockets, i la transmissió de missatges es realitza mitjançant l'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 d'aquest paquet, cal definir els paquets següents:

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

ud3.exercises.guess

Implementa un servidor que permeta jugar a endevinar un nombre aleatori entre 1 i 1000. Quan un client es connecte al servidor, aquest tria un nombre aleatori entre 1 i 1000. El client ha d'anar enviant nombres al servidor fins que encerte el nombre.

El servidor ha de respondre amb els missatges següents:

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

Ampliacions

Si has acabat l'exercici anterior, pots implementar les funcionalitats següents:

  • Possibilitat de tornar a jugar: després d'encertar el nombre, 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 nombre. Si la persona usuària supera aquest nombre, el servidor li informa que ha perdut i li mostra el nombre que havia de trobar.
  • Sistema de puntuació: el servidor implementa un sistema de puntuació basat en el nombre d'intents realitzats per endevinar el nombre.
  • Pista: el servidor pot oferir una pista a la persona usuària. Pot suposar una penalització en la puntuació final.

2. Servidor de temps

ud3.exercises.time

Implementa un servidor que informe de l'hora i la data actuals 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 l'hora actuals.

Totes les peticions poden contindre un paràmetre opcional que indique la zona horària de la qual es vol obtindre la data i l'hora. Si no s'indica cap zona horària, s'utilitza el Temps Universal Coordinat (UTC).

3. Aplicació de recordatoris

ud3.exercises.reminder

Implementa una aplicació client-servidor de gestió de recordatoris per a diverses persones usuàries. Per simplificar, no cal implementar un sistema d'autenticació robust: n'hi ha prou amb identificar-se amb un nom d'usuari. L'aplicació ha de permetre les operacions següents:

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

4. Servidor de correu electrònic

ud3.exercises.email

Implementa una aplicació client-servidor de gestió de correu electrònic. El servidor ha de ser capaç de gestionar, emmagatzemar i enviar correus electrònics entre diferents persones usuàries. Per simplificar, no cal implementar un sistema d'autenticació robust: n'hi ha prou amb identificar-se amb l'adreça de correu electrònic. L'aplicació ha de permetre les operacions següents:

  • SEND: envia un correu electrònic d'una persona usuària a una altra.
  • 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.