lpr-b:lpr-b-08: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-08:esercizi [12/11/2008 alle 13:53 (17 anni fa)] – Andrea Corradini | lpr-b:lpr-b-08:esercizi [03/09/2009 alle 09:10 (16 anni fa)] (versione attuale) – Andrea Corradini | ||
---|---|---|---|
Linea 40: | Linea 40: | ||
Prima della terminazione il thread stampa il valore approssimato di pigreco calcolato fino a quel momento. | Prima della terminazione il thread stampa il valore approssimato di pigreco calcolato fino a quel momento. | ||
- | |||
- | //Soluzione proposta: [[http:// | ||
Linea 47: | Linea 45: | ||
Modificare il programma dell' | Modificare il programma dell' | ||
- | //Soluzione proposta: [[http:// | ||
===== Thread Pooling e Indirizzi IP ===== | ===== Thread Pooling e Indirizzi IP ===== | ||
Linea 58: | Linea 55: | ||
* Per ottimizzare la ricerca, si deve attivare un pool di thread che esegua i task in modo concorrente. Ogni volta che si sottomette al pool di thread un task, si ottiene un oggetto **Future< | * Per ottimizzare la ricerca, si deve attivare un pool di thread che esegua i task in modo concorrente. Ogni volta che si sottomette al pool di thread un task, si ottiene un oggetto **Future< | ||
* Infine, si scorre l’**ArrayList**, | * Infine, si scorre l’**ArrayList**, | ||
+ | |||
=== Esercizio 2 === | === Esercizio 2 === | ||
Linea 164: | Linea 162: | ||
===== Il protocollo UDP [2] ===== | ===== Il protocollo UDP [2] ===== | ||
+ | ** Inviare gli esercizi svolti a [email protected] con Subject " | ||
=== Esercizio 1: Objects to DatagramPackets === | === Esercizio 1: Objects to DatagramPackets === | ||
Linea 220: | Linea 219: | ||
===== Il Protocollo TCP ===== | ===== Il Protocollo TCP ===== | ||
+ | ** Inviare gli esercizi svolti a [email protected] con Subject " | ||
=== Esercizio 1: Compressione di file === | === Esercizio 1: Compressione di file === | ||
Linea 230: | Linea 230: | ||
Individuare le condizioni necessarie affinchè | Individuare le condizioni necessarie affinchè | ||
+ | |||
+ | **Suggerimento: | ||
+ | |||
=== Esercizio 2: Interazione con server predefiniti === | === Esercizio 2: Interazione con server predefiniti === | ||
Considerare | Considerare | ||
+ | |||
+ | ** Attenzione: | ||
+ | come protocollo HTTP 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 '' | ||
+ | attraverso la quale si possono scambiare stringhe. | ||
+ | |||
+ | ===== Ancora TCP e Multicast ===== | ||
+ | ** Inviare gli esercizi svolti a [email protected] 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**. | ||
- | Provare anche con i seguenti servizi (vedere JAVA Network Programming): | + | Il server invia ai client che lo richiedono il valore della migliore offerta |
- | * Daytime(porta 13): il client | + | ricevuta fino ad un certo momento e riceve dai client le richieste di |
- | * Echo (port 7): il client | + | rilancio. Per ogni richiesta di rilancio, il server notifica al client se tale |
- | * Finger | + | offerta può essere accettata |
- | | + | oppure è rifiutata. |
+ | Il server deve attivare un thread diverso per ogni client | ||
+ | partecipare all' | ||
+ | |||
+ | La comunicazione tra clients e server deve avvenire mediante socket | ||
+ | TCP. Sviluppare due diverse versioni del programma che utilizzino, | ||
+ | rispettivamente | ||
+ | server oppure la serializzazione offerta da JAVA in modo da scambiare | ||
+ | oggetti tramite la connessione | ||
+ | |||
+ | === Esercizio 2: TimeServer Multicast === | ||
+ | Definire un server | ||
+ | **dategroup**, | ||
+ | successivo può essere simulata mediante il metodo | ||
+ | di **dategroup** viene introdotta linea di comando. | ||
+ | |||
+ | Definire quindi un client | ||
+ | dieci volte consecutive, | ||
+ | |||
+ | ===== Esercizi su RMI ===== | ||
+ | ** Inviare gli esercizi svolti a [email protected] con Subject " | ||
+ | |||
+ | === Esercizio 1: Gestione elezione === | ||
+ | Sviluppare una applicazione RMI per la gestione di un’elezione. Il server | ||
+ | |||
+ | * '' | ||
+ | |||
+ | * '' | ||
+ | |||
+ | * un metodo che consenta di ottenere i nomi di tutti i candidati, con i rispettivi voti, ordinati rispetto ai voti ottenuti. | ||
+ | |||
+ | Il client | ||
+ | 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), | ||
+ | |||
+ | ===== Esercizi su RMI Callbacks ===== | ||
+ | |||
+ | === 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à: | ||
+ | | ||
+ | - 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 | ||
+ | |||
+ | |||
+ | ===== Esercizi su Collezioni Sincronizzate e Secure Sockets===== | ||
+ | |||
+ | === Esercizio 1: Crawler === | ||
+ | |||
+ | Si realizzi un programma **Crawler** che analizza tutti i file presenti | ||
+ | in una directory specificata e nelle sue sottodirectory, | ||
+ | righe presenti in tali file che contengono una determinata parola chiave //P//. | ||
+ | |||
+ | Il programma deve attivare due thread, | ||
+ | |||
+ | * un thread produttore che enumera tutti i file e inserisce un riferimento | ||
+ | ad ogni file individuato in una coda bloccante; | ||
+ | |||
+ | * un consumatore che estrae i riferimenti ai file dalla coda e, per ognuno | ||
+ | di essi, visualizza tutte le righe che contengono la parola chiave //P//. | ||
+ | I due thread si scambiano i dati mediante una coda bloccante. Scegliere il | ||
+ | tipo di coda bloccante ritenuto più opportuno. | ||
+ | |||
+ | |||
+ | === Esercizio 2: Secure Sockets === | ||
+ | |||
+ | Per prima cosa, tramite **keytool** creare le chiavi pubbliche/ | ||
+ | (che andranno associate al server | ||
+ | un truststore (sul client). Usando le chiavi svolgere i seguenti esercizi: | ||
+ | |||
+ | - Effettuare una comunicazione sicura su TCP (come nell’esempio del Web Server visto a lezione) modificando uno degli esercizi assegnati nelle lezioni precedenti in maniera da usare socket sicuri invece dei socket TCP; | ||
+ | - Modificare l’esercizio sulla votazione RMI proposto per l' | ||
+ | |||
+ | In entrambi i casi, dal lato client deve essere presente solo il file con il truststore | ||
+ | (non il file con le chiavi). Tutte le password usate (per esempio per il trustore/ | ||
+ | NON devono essere | ||
+ | inserite nei file sorgenti, ma (per esempio) passate come parametri da riga di comando | ||
+ | o inserite a runtime. | ||
====== ====== | ====== ====== | ||
[[start|Torna alla pagina principale di LPR-B-08]] | [[start|Torna alla pagina principale di LPR-B-08]] |
lpr-b/lpr-b-08/esercizi.1226498035.txt.gz · Ultima modifica: 12/11/2008 alle 13:53 (17 anni fa) da Andrea Corradini