Adapta el codi de la Pràctica 2 (LyricsApp) perquè tinga una
estructura client-servidor i es connecte a un servidor per rebre les línies de la cançó. El
protocol de comunicació entre el client i el servidor s'ha d'implementar mitjançant
l'enviament d'objectes.
Originalment, la classe Loader llig les línies, una a una, des d'un fitxer de text. Adapta el
codi perquè, en lloc de llegir-les del fitxer, es connecte a un servidor disponible en
localhost en el port 1234 per demanar-li les línies.
Implementa els missatges com a objectes.
El client ha de començar per preguntar al servidor quantes línies té la cançó, amb un missatge
del tipus NUM_LINES. A continuació, ha d'enviar una petició del tipus GET indicant l'índex
de la línia que vol rebre.
Crea el servidor LyricsServer en Java que escolte en el port 1234. El servidor
proporciona la lletra de la cançó disponible en
files/ud2/lyrics.txt.
El servidor ha de ser capaç de gestionar diferents clients a la vegada. Per tant, ha
d'implementar la classe LyricsServerHandler per comunicar-se amb cada client.
Implementa els missatges com a objectes.
El servidor gestiona les peticions dels clients seguint el protocol següent:
NUM_LINES: el servidor respon amb un missatge del tipus SUCCESS amb el nombre de
línies de la cançó.
GET + i:
Si i està dins del rang de línies de la cançó, el servidor respon amb un missatge del
tipus SUCCESS amb la línia corresponent.
Si i està fora del rang, el servidor respon amb un missatge del tipus ERROR amb el
missatge La línia solicitada no existeix.
Ramonet, si vas a l'hort
porta figues, porta figues
La classe Loader (client) es connecta amb el servidor.
El client pregunta al servidor quantes línies té la cançó amb un missatge NUM_LINES.
El servidor contesta amb SUCCESS 2.
El client sol·licita la primera línia amb un missatge GET 0.
El servidor rep GET 0 i contesta amb Ramonet, si vas a l'hort.
El client rep la línia de la lletra i l'afig a la cua.
El client envia el missatge GET 1.
El servidor rep GET 1 i contesta amb porta figues, porta figues.
El client rep la línia de la lletra i l'afig a la cua.
Com que ja no queden línies, el client acaba la connexió.
sequenceDiagram
actor Usuari
Client->>Servidor: Connexió
Servidor-->>Client: Connexió acceptada
Client->>Servidor: NUM_LINES
Servidor-->>Client: SUCCESS n
loop i = 0 to n
Client->>Servidor: GET i
alt Línia 'i' existeix
Servidor-->>Client: Línia i
Client->>Usuari: Reprodueix línia
else
Servidor-->>Client: ERROR: La línia solicitada no existeix
Client->>Client: Acaba el bucle i set 'end = true'
end
end
Client->>Client: Acaba el bucle i set 'end = true'
📌 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.