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