Cognome: Nome: Matricola: Reti di Calcolatori L-A Appello del 22/06/2006 ……………………………… ……………………………… ……………………………… Compito 1 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. Parte Java Utilizzando java RMI sviluppare un’applicazione C/S che consenta di effettuare le operazioni remote per: • modificare una descrizione; • eliminare un album. 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 modifica_descrizione accetta come parametro d’ingresso il nome del file e la nuova descrizione, quindi restituisce valore logico vero in caso di successo, falso in caso d’errore, ad esempio, se la foto non è presente nel sistema. Il metodo elimina_album accetta come parametro d’ingresso il titolo dell’album, elimina tutti i file e libera le righe corrispondenti alle foto dell’album nella struttura dati; quindi restituisce valore logico vero in caso di successo, falso in caso d’errore, ad esempio, se l’album 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 **************************************************************************************************************** Si richiede il progetto della gestione dei servizi FotoHosting, per utenti che vogliono condividere le proprie foto. FotoHosting mette a disposizione un insieme di funzionalità per la gestione e la condivisione di foto; tutti i file (le singole foto) vengono mantenuti in uno stesso direttorio e ad ogni file è associato un album ed una descrizione della foto. In particolare, si richiede di realizzare le seguenti funzionalità: 1. visualizzazione delle descrizioni delle foto di un album: questa operazione richiede il nome dell’album e visualizza i nomi dei file e le descrizioni delle prime cinque foto contenute nell’album richiesto; 2. modifica di una descrizione: questa operazione richiede il nome del file e la nuova descrizione, quindi effettua la modifica della descrizione sulla struttura dati; 3. eliminazione di un album: questa operazione richiede il titolo dell’album, ed elimina tutti i file relativi all’album dal sistema, e le foto dalla struttura dati; 4. download di una foto con un certo identificativo: questa operazione richiede il nome del file e lo trasferisce dal cliente al servitore. Si progetti inoltre la struttura dati che mantiene le N foto (L, per libero a default), da implementare opportunamente nei diversi ambienti richiesti, Java e C. Per ogni foto vengono mantenuti album, descrizione, e nome del file. Album Montagna Montagna L L Mare Descrizione Passeggiata Alpe Siusi Shopping Ortisei L L Grattacielo Cesenatico 1 File foto1.jpg foto2.jpg L L foto6.jpg Sviluppare un’applicazione C/S che consenta di effettuare le operazioni remote per: • effettuare il download di una foto; • visualizzare le descrizioni delle prime cinque foto dell’album; con un servitore multiservizio (uso di select). Più in dettaglio: • Il client_stream realizza la funzionalità di download di una foto utilizzando socket stream. Il client chiede ciclicamente all’utente il nome del file da scaricare, fino alla fine del file di input da tastiera, dopodichè libera opportunamente le risorse e termina. Ad ogni richiesta, il client invia al server il nome del file, quindi riceve il file, che salva sul file system locale, oppure l’esito negativo della richiesta, che stampa a video. • Il client_datagram realizza la funzionalità di visualizzazione delle descrizioni delle prime cinque foto di un album utilizzando socket datagram. Il client chiede ciclicamente all’utente il nome dell’album, 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 il nome dell’album, quindi riceve le descrizioni delle prime cinque foto, oppure l’esito negativo della richiesta, 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, mentre la funzionalità di visualizzazione delle descrizioni può essere realizzata in modo seriale o parallelo. Per ogni richiesta di download di una foto, il figlio riceve il nome del file, quindi invia il file, oppure, in caso di errore o file non esistente, invia una indicazione di esito negativo, ad esempio -1. Per ogni richiesta di visualizzazione delle descrizioni delle foto di un album il figlio riceve il nome dell’album, quindi invia il nome del file e le descrizioni delle prime foto dell’album (fino ad un massimo di cinque), oppure, in caso di errore o album non esistente, invia una indicazione di esito negativo, ad esempio -1. 2