Reti di Calcolatori L-A Appello del 19/04/2004 Cognome: ……………………………… Tempo a disposizione: 2h Matricola: ……………………………… Nome: ……………………………… E’ obbligatorio mettere Cognome Nome Matricola e 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 per ogni file sorgente consegnato singolarmente. Si devono consegnare singolarmente tutti i file sorgente e tutti gli eseguibili prodotti (per favore, solo quelli relativi ai file sorgente consegnati!!!), senza usare forme compresse. La prova intende valutare le capacità progettuali e di programmazione sia in ambiente Java sia in ambiente C. È consigliabile sviluppare, almeno in parte, entrambe le soluzioni richieste. Dovendo realizzare la soluzione, tutta o in parte, sia in Java che in C, vale la pena pensare ad un progetto che sia il più possibile portabile tra i due linguaggi. In entrambi gli esercizi, sia Java che 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. Inserire opportuni commenti per facilitare la comprensione del codice. 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 vuole realizzare un sistema che consenta di gestire una biblioteca elettronica. I libri in formato elettronico non vengono prestati ma scaricati. Si devono fornire funzionalità per consentire all’utente di: • • • ottenere l’elenco dei libri disponibili; ottenere le informazioni relative ad uno specifico libro; scaricare un certo libro; Il server deve gestire le informazioni relative ai libri disponibili mediante opportune strutture dati. In Java, sono necessarie due strutture: La casa del sonno J. Coe Struttura che raccoglie tutti i libri della biblioteca: Feltrinelli La casa del sonno Cent’anni di solitudine Lo Hobbit … In C, è necessaria una struttura che raccolga i titoli: La casa del sonno Cent’anni di solitudine Lo Hobbit … Utilizzando java RMI sviluppare un’applicazione C/S che consenta ad un utente di effettuare le operazioni remote per: • • ottenere l’elenco dei titoli dei libri disponibili; ottenere le informazioni relative ad uno specifico libro. Il progetto RMI si basa su: • un’interfaccia (ServerInterface, contenuta nel file ServerInterface.java) in cui vengono definiti i metodi invocabili in remoto dal client: import java.rmi.Remote; import java.rmi.RemoteException; public interface ServerInterface extends Remote { Libro[] elenco() throws RemoteException; Libro info_libro(String titolo) throws RemoteException; } • una classe (Libro contenuta nel file Libro.java), che implementa la struttura dati contenente le informazioni relative ad un certo libro, ovvero titolo, autori, casa editrice e anno di pubblicazione; Il server, inoltre, deve raccogliere tutti gli oggetti di classe Libro in una struttura, per esempio un vettore di N oggetti di classe Libro (es. N=20). 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, fino alla fine del file di input da tastiera. Parte C La prima funzionalità deve essere realizzata sia in Java che in C, la seconda solo in Java, la terza solo in C. Informazioni sul singolo libro: Parte Java J. Coe G. G. Marquez J.R. R.Tolkien … Feltrinelli Mondadori Bompiani … Utilizzando la primitiva select sviluppare un’applicazione C/S che consenta di: • • ottenere l’elenco dei titoli dei libri disponibili; scaricare un certo libro. Più in dettaglio, si sviluppino: • un client datagram (elenco), che invia al server la richiesta di elenco senza argomenti, e riceve la lista dei titoli disponibili; • un client stream (scarica_libro), che chiede ciclicamente da console all’utente il titolo del libro che vuole scaricare. Per ogni ciclo, il client usa la propria connessione per inviare la richiesta al server e salva in locale il file ricevuto; • il server (server_select), che discrimina le richieste utilizzando la primitiva select. Le richieste di invio dell’elenco devono essere gestite, tramite socket datagram, in maniera sequenziale. Le richieste di scaricamento di un libro devono essere gestite, tramite socket stream, in maniera parallela. N.B.: a differenza della parte Java, la struttura dati che memorizza le informazioni relative ai libri contiene solo i titoli, quindi, per esempio, è sufficiente un vettore di N stringhe (es. N=20). Si supponga inoltre per semplicità che i nomi dei file coincidano con i titoli dei libri. e un file per ciascun titolo. 1 2