Pràctica 3: Sòcols i serveis
Autor: Joan Puigcerver Ibáñez
Correu electrònic: j.puigcerveribanez@edu.gva.es
Llicència: CC BY-NC-SA 4.0
(Reconeixement - NoComercial - CompartirIgual) 🅭
Entrega
L'entrega ha de complir els següents requisits:
- Package:
ud3.practices
- El nom de la classe on comença l'execució (
main() ) de cada exercici és el títol de l'exercici.
- El format de la eixida del programa ha de ser consistent
amb el format demanat.
- S'ha d'entregar un fitxer .zip amb el contingut del package
ud3.practices .
- El codi ha d'estar pujat a GitHub en el vostre repositori de l'assignatura.
- Tag GitHub:
PracticeSocket (StackOverflow: Create a tag in a GitHub repository)
LyricsPlayer
- Package:
ud3.practices.lyrics
Adapta el codi de la Pràctica 2: LyricsPlayer perquè tinga una estructura
client/servidor i es connecte a un servidor per a 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.
Codi de la solució de la Pràctica 2
Client
- Package:
ud3.practices.lyrics.client
Originalment, la classe Loader llegeix les línies,
una a una, des d'un fitxer de text.
Adapta el codi perquè, en compte de llegir-les del fitxer,
es connecte a un servidor que estarà disponible en localhost en el port 1234
per demanar-li les línies.
Important
Heu d'implementar els missatges com a objectes.
El client començarà per preguntar-li al servidor quants línies té la cançó
amb un missatge del tipus NUM_LINES
A continuació, el client enviarà una petició del tipus GET
indicant l'índex de la línia que vol rebre.
Servidor: LyricsServer
- Package:
ud3.practices.lyrics.server
Crea el servidor LyricsServer en Java que escolte en el port 1234 .
El servidor proporcionarà la lletra de la cançó disponible a
files/ud2/lyrics.txt
El servidor ha de ser capaç de gestionar diferents clients a la vegada, per tant,
haurà d'implementar la classe LyricsServerHandler per comunicar-se amb cada client.
Important
Heu d'implementar els missatges com a objectes.
El servidor gestionarà les peticions dels clients seguint el protocol següent:
NUM_LINES : El servidor respondrà 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 respondrà amb un missatge del tipus SUCCESS amb la línia corresponent.
- Si
i està fora del rang, el servidor respondrà amb un missatge del tipus ERROR amb el missatge La línia solicitada no existeix.
Exemple d'execució
En aquest exemple, la cançó serà:
Ramonet, si vas a l'hort
porta figues, porta figues
- La classe
Loader (client) es connectarà amb el servidor.
- El client preguntarà al servidor quants línies té la cançó amb un missatge
NUM_LINES .
- El servidor contestarà amb
SUCCESS 2 .
- El client sol·licitarà la primera línia amb un missatge
GET 0 .
- El servidor rebrà
GET 0 .
- El servidor contestarà amb
Ramonet, si vas a l'hort
- El client rebrà la línia de la lletra i l'afegirà a la cua.
- El client enviarà el missatge
GET 1 .
- El servidor rebrà
GET 1 .
- El servidor contestarà amb
porta figues, porta figues .
- El client rebrà la línia de la lletra i l'afegirà a la cua.
- Com que ja no queden linies, el client acabarà 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'
|