Cognome:
Nome:
Matricola:
Reti di Calcolatori L-A
Appello del 12/01/2006
………………………………
………………………………
………………………………
Compito 5
Tempo a disposizione: 2h
E’ obbligatorio mettere Cognome Nome Matricola e Numero Compito all’inizio di ogni file
sorgente, pena la non valutazione del compito, che viene stampato in modo automatico,
solo in caso siano presenti gli elementi detti sopra.
Si devono consegnare tutti i file sorgente e tutti gli eseguibili prodotti singolarmente (per
favore, solo quelli relativi ai file sorgente consegnati!!!).
La prova intende valutare le capacità progettuali e di programmazione sia in ambiente Java che in
ambiente C, pertanto è consigliabile sviluppare, almeno in parte, entrambe le soluzioni richieste.
In entrambi gli esercizi, sia in Java che in C, si effettuino gli opportuni controlli sui parametri della
richiesta e si gestiscano le eccezioni, tenendo presente i criteri secondo cui si possa ripristinare il
funzionamento del programma oppure si debba forzarne la terminazione.
Leggete con attenzione le specifiche del problema prima di impegnarvi “a testa bassa”
nello sviluppo delle singole parti.
Naturalmente, i componenti da consegnare devono essere stati provati.
****************************************************************************************************************
Si richiede il progetto della gestione dei servizi MusicaPerTutti, per utenti che vogliono
condividere la propria musica. MusicaPerTutti mette a disposizione un insieme di funzionalità per
la gestione e la condivisione di brani e pezzi; tutti i file vengono mantenuti in uno stesso direttorio e
ad ogni file è associato un titolo, e l’anno di incisione del pezzo.
In particolare, si richiede di realizzare le seguenti funzionalità:
1. visualizzazione delle canzoni incise in un intervallo di tempo fra due anni: questa
operazione richiede due anni (il primo deve essere antecedente il secondo) e visualizza tutti i
titoli dei brani incisi fra il primo e il secondo anno (estremi compresi);
2. ricerca canzone con un certo titolo: questa operazione richiede il titolo di un pezzo e
restituisce il titolo cercato, l’anno di incisione, e il nome del file corrispondente;
3. eliminazione di una canzone: questa operazione richiede il titolo della canzone, cancella il
relativo file, ed la elimina canzone dalla struttura dati;
4. download di una canzone: questa operazione richiede il titolo del pezzo il file corrispondente
al brano dal servitore al cliente.
Si progetti inoltre la struttura dati che mantiene le N canzoni (L, per libero a default), da
implementare opportunamente nei diversi ambienti richiesti, Java e C. Per ogni canzone vengono
mantenuti titolo, anno di incisione, e nome del file.
Titolo
Michelle
Show must go on
One
L
Natale in casa Wizzent
Anno
1966
1991
1991
L
1990
1
File
mich.mp3
show.mp3
one.mp3
L
wiz.mp3
Parte Java
Utilizzando java RMI sviluppare un’applicazione C/S che consenta di effettuare le operazioni remote
per:
• visualizzare le canzoni incise in un intervallo di tempo fra due anni;
• eliminare una canzone dalla struttura dati.
Il progetto RMI si basa su:
• un’interfaccia (RemOp, contenuta nel file RemOp.java) in cui vengono definiti i metodi invocabili in
remoto dal client:
Il metodo visualizza_canzoni accetta come parametro d’ingresso i due anni e restituisce o la
lista dei brani incisi nell’intervallo di tempo cercato, o null in caso d’errore o se la ricerca non
individua alcun brano.
Il metodo elimina_canzone accetta come parametro d’ingresso il titolo della canzone, elimina il
file e libera la riga corrispondente alla canzone nella struttura dati; quindi restituisce valore logico
vero in caso di successo, falso in caso d’errore, ad esempio, se la canzone che si vuole eliminare
non è presente nel sistema.
Si progettino inoltre le classi:
• Server (contenuta nel file Server.java), che implementa i metodi del server invocabili in remoto;
• Client (contenuta nel file Client.java), che realizza l’interazione con l’utente proponendo
ciclicamente i servizi che utilizzano i due metodi remoti, e stampa a video i risultati, fino alla fine del
file di input da tastiera.
Parte C
Sviluppare un’applicazione C/S che consenta di effettuare le operazioni remote per:
• effettuare il download di una canzone dal servitore al cliente;
• ricercare una canzone con un certo titolo;
con un servitore multiservizio (uso di select).
Più in dettaglio:
• il client_stream realizza la funzionalità di download della canzone utilizzando socket stream. Il
client propone ciclicamente all’utente l’operazione di download, fino alla fine del file di input da
tastiera, dopodichè libera opportunamente le risorse e termina. Ad ogni richiesta, il client richiede
all’utente e invia al server il titolo della canzone, quindi, se il brano è presente nel server, lo riceve e
lo scrive sul file system locale. Se un file con lo stesso nome è già presente in locale, il client lo
sovrascrive.
•
il client_datagram realizza la funzionalità di ricerca del titolo utilizzando socket datagram. Il client
chiede ciclicamente all’utente il titolo della canzone da cercare, fino alla fine del file di input da
tastiera, e, al termine, libera opportunamente le risorse e termina.
Ad ogni richiesta dell’utente il client invia la richiesta, riceve l’esito dell’operazione, e lo stampa a
video.
•
il server principale unico discrimina le richieste utilizzando la primitiva select. Il server gestisce in
modo parallelo la funzionalità di download di una canzone, mentre la funzionalità di ricerca può
essere realizzata in modo seriale o parallelo.
Per ogni richiesta di download il server genera un figlio che gestisce l’interazione col client fino alla
chiusura della connessione da parte del client. Per ciascuna richiesta il figlio legge il titolo della
canzone, quindi, se il brano è presente nel sistema trasferisce il pezzo, altrimenti notifica al client
una condizione di errore.
Per ogni richiesta di ricerca di titolo, il server riceve il titolo, ricerca la canzone all’interno della
struttura dati, e invia al client la riga corrispondente al brano cercato, oppure la stringa
“NON_TROVATO” se il brano non è presente nel sistema.
2