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