lpr-b:lpr-b-09:esercizi
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
| lpr-b:lpr-b-09:esercizi [16/11/2009 alle 23:14 (16 anni fa)] – Andrea Corradini | lpr-b:lpr-b-09:esercizi [08/12/2009 alle 12:45 (16 anni fa)] (versione attuale) – Andrea Corradini | ||
|---|---|---|---|
| Linea 266: | Linea 266: | ||
| * Confrontare il file originale spedito dal mittente con quello ricevuto dal destinatario e scritto nel file system. | * Confrontare il file originale spedito dal mittente con quello ricevuto dal destinatario e scritto nel file system. | ||
| * Usare la classe [[http:// | * Usare la classe [[http:// | ||
| + | |||
| + | ===== Il Protocollo TCP ===== | ||
| + | ** Inviare gli esercizi svolti a acorradi@cli.di.unipi.it con Subject " | ||
| + | |||
| + | === Esercizio 1: Compressione di file === | ||
| + | |||
| + | Progettare un' | ||
| + | Il client legge chunks di bytes da un file e li spedisce al server che provvede alla loro compressione. Il server restituisce | ||
| + | file originario e con estensione **gz**, che contiene i dati ricevuti dal server. | ||
| + | |||
| + | La comunicazione tra client e server utilizza il protocollo TCP. Per la compressione si può utilizzare la classe JAVA '' | ||
| + | |||
| + | Individuare le condizioni necessarie affinchè | ||
| + | |||
| + | **Suggerimento: | ||
| + | |||
| + | |||
| + | === Esercizio 2: Compressione di file, estensioni === | ||
| + | |||
| + | Si realizzi il client con due thread, uno per la lettura del file originale e l' | ||
| + | ove necessario, la sincronizzazione fra i due e la gestione degli errori) | ||
| + | |||
| + | Si realizzi il server in modo da poter gestire in maniera efficiente connessioni multiple da parte di più client – si ipotizzi anche che il numero di richieste di servizio possa | ||
| + | essere elevato | ||
| + | |||
| + | Quali costrutti per il multithreading sono maggiormente indicati in ciascuno dei due casi di cui sopra? | ||
| + | |||
| + | **Suggerimento: | ||
| + | |||
| + | |||
| + | === Esercizio 3: Interazione con server predefiniti === | ||
| + | |||
| + | Utilizzando come protocollo HTTP (come visto nel corso di Reti) sulla porta 80, e come host un web server (per esempio, '' | ||
| + | scrivere un semplice client HTTP in grado di effettuare una breve sequenza di richieste al server, stampando i risultati. Per testare il protocollo si può usare il comando '' | ||
| + | |||
| + | ===== Protocollo TCP e Multicast ===== | ||
| + | ** Inviare gli esercizi svolti a acorradi@cli.di.unipi.it con Subject " | ||
| + | |||
| + | === Esercizio 1: Asta Elettronica === | ||
| + | |||
| + | Sviluppare un programma client server per il supporto di un' | ||
| + | |||
| + | Ogni client possiede un budget massimo **B** da investire. | ||
| + | Il client può richiedere al server il valore **V** della migliore offerta | ||
| + | pervenuta fino ad un certo istante e decidere se abbandonare l' | ||
| + | oppure rilanciare. Se il valore ricevuto dal server supera **B**, | ||
| + | abbandona l' | ||
| + | inviando al server un valore maggiore di **V**. | ||
| + | |||
| + | Il server invia ai client che lo richiedono il valore della migliore offerta | ||
| + | ricevuta fino ad un certo momento e riceve dai client le richieste di | ||
| + | rilancio. Per ogni richiesta di rilancio, il server notifica al client se tale | ||
| + | offerta può essere accettata (nessuno ha offerto di più nel frattempo), | ||
| + | oppure è rifiutata. | ||
| + | Il server deve attivare un thread diverso per ogni client che intende | ||
| + | partecipare all' | ||
| + | |||
| + | La comunicazione tra clients e server deve avvenire mediante socket | ||
| + | TCP. Sviluppare due diverse versioni del programma che utilizzino, | ||
| + | rispettivamente una codifica testuale dei messaggi spediti tra client e | ||
| + | server oppure la serializzazione offerta da JAVA in modo da scambiare | ||
| + | oggetti tramite la connessione TCP | ||
| + | |||
| + | === Esercizio 2: TimeServer Multicast === | ||
| + | Definire un server **TimeServer**, | ||
| + | **dategroup**, | ||
| + | successivo può essere simulata mediante il metodo | ||
| + | di **dategroup** viene introdotta linea di comando. | ||
| + | |||
| + | Definire quindi un client **TimeClient** che si unisce a **dategroup** e riceve, per | ||
| + | dieci volte consecutive, | ||
| + | |||
| + | === Esercizio 3: Streaming Audio === | ||
| + | La pagina '' | ||
| + | audio nel popolare formato WAV (audio non compresso) | ||
| + | |||
| + | * Questi dati possono generalmente essere riprodotti, su macchine UNIX, semplicemente scrivendo il loro contenuto su ''/ | ||
| + | * Attenzione: su alcune installazioni, | ||
| + | * Si scriva un server streaming audio che, ricevuta sulla riga di comando l'URL di un file WAV, lo scarichi dal web e trasmetta il contenuto, con adeguata temporizzazione, | ||
| + | * Si scriva poi un client streaming audio che, ricevuto sulla riga di comando l' | ||
| + | |||
| + | Non ci si allarmi se l' | ||
| + | |||
| + | |||
| + | |||
| + | ===== Remote Method Invocation ===== | ||
| + | ** Inviare gli esercizi svolti a acorradi@cli.di.unipi.it con Subject " | ||
| + | |||
| + | === Esercizio 1: Gestione elezione === | ||
| + | Sviluppare una applicazione RMI per la gestione di un’elezione. Il server esporta un insieme di metodi: | ||
| + | |||
| + | * '' | ||
| + | |||
| + | * '' | ||
| + | |||
| + | * un metodo che consenta di ottenere i nomi di tutti i candidati, con i rispettivi voti, ordinati rispetto ai voti ottenuti. | ||
| + | |||
| + | Il client invoca un certo numero di volte i metodi del server su opportuni argomenti (eventualmente forniti interattivamente dall' | ||
| + | Testare che il sistema funzioni con server e client sullo stesso host e su host diversi. Nel secondo caso, provare due versioni: con il registry sull' | ||
| + | |||
| + | === Esercizio 2: Passaggio di parametri con RMI === | ||
| + | |||
| + | Scrivere opportune classi e interfacce per verificare che nel caso di valori di tipo riferimento (oggetti e array), una invocazione di metodo remota passa al metodo chiamante una copia dell' | ||
| + | |||
| + | ===== RMI e Callback ===== | ||
| + | |||
| + | === Esercizio 1: Gestione elezione === | ||
| + | |||
| + | Modificare l’Esercizio 1 dell' | ||
| + | |||
| + | === Esercizio 2: Forum === | ||
| + | |||
| + | Si vuole implementare un sistema che implementi un servizio per la gestione di forum in rete. Un forum è caratterizzato da un argomento su cui diversi utenti, iscritti al forum, possono scambiarsi opinioni via rete. | ||
| + | Il sistema deve prevedere un server RMI che fornisca le seguenti funzionalità: | ||
| + | - apertura di un nuovo forum, di cui è specificato l' | ||
| + | - registrazione ad un forum, di cui è specificato l' | ||
| + | - inserimento di un nuovo messaggio indirizzato ad un forum identificato dall' | ||
| + | - reperimento dell' | ||
| + | Quindi il messaggio può essere richiesto esplicitamente dal client oppure può essere notificato ad un client precedentemente registrato. | ||
lpr-b/lpr-b-09/esercizi.1258413242.txt.gz · Ultima modifica: 16/11/2009 alle 23:14 (16 anni fa) da Andrea Corradini
