Strumenti Utente

Strumenti Sito


lpr-b:lpr-b-08:esercizi

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
lpr-b:lpr-b-08:esercizi [19/11/2008 alle 15:06 (17 anni fa)] Andrea Corradinilpr-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://www.di.unipi.it/~andrea/Didattica/LPR08/Soluzioni/TaskPi.java|TaskPi.java]]// 
  
  
Linea 47: Linea 45:
 Modificare il programma dell'esercizio precedente in modo che il valore approssimato di pigreco calcolato dal thread venga stampato dal main. Modificare il programma dell'esercizio precedente in modo che il valore approssimato di pigreco calcolato dal thread venga stampato dal main.
  
-//Soluzione proposta: [[http://www.di.unipi.it/~andrea/Didattica/LPR08/Soluzioni/TaskPiStampaMain.java|TaskPiStampaMain.java]]// 
  
 ===== 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<InetAddress>**, che deve essere aggiunto ad un **ArrayList**.    * 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<InetAddress>**, che deve essere aggiunto ad un **ArrayList**. 
   * Infine, si scorre l’**ArrayList**, stampando a video gli **InetAddress**.   * Infine, si scorre l’**ArrayList**, stampando a video gli **InetAddress**.
 +
  
 === 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 "[LPR-B] Esercitazione 6" **
  
 === 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 "[LPR-B] Esercitazione 7" **
  
 === Esercizio 1: Compressione di file === === Esercizio 1: Compressione di file ===
Linea 244: Linea 244:
  
 ===== Ancora TCP e Multicast ===== ===== Ancora TCP e Multicast =====
 +** Inviare gli esercizi svolti a [email protected] con Subject "[LPR-B] Esercitazione 8" **
  
 === Esercizio 1: Asta Elettronica === === Esercizio 1: Asta Elettronica ===
Linea 279: Linea 279:
 Definire quindi un client **TimeClient** che si unisce a **dategroup** e riceve, per Definire quindi un client **TimeClient** che si unisce a **dategroup** e riceve, per
 dieci volte consecutive, data ed ora, le visualizza, quindi termina. dieci volte consecutive, data ed ora, le visualizza, quindi termina.
 +
 +===== Esercizi su RMI =====
 +** Inviare gli esercizi svolti a [email protected] con Subject "[LPR-B] Esercitazione 9" **
 +
 +=== Esercizio 1: Gestione elezione ===
 +Sviluppare una applicazione RMI per la gestione di un’elezione. Il server esporta un insieme di metodi:
 +
 +  * ''public void vota (String nome)'': Accetta come parametro il nome del candidato. Non restituisce alcun valore. Registra il voto di un candidato in una struttura dati opportunamente scelta.
 +
 +  * ''public int risultato (String nome)'': Accetta come parametro il nome di un candidato e restituisce i voti accumulati da tale candidato fino a quel momento.
 +
 +  * 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'utente), stampando i risultati ottenuti.
 +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'host del server (come negli esempi visti), e con il registry sull'host del client.  
 +
 +=== 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'oggetto passato come parametro, diversamente da quanto accade nel caso di una invocazione locale. Mostrare che invece, se il parametro è un oggetto remoto, allora viene passato un riferimento all'oggetto e non una sua copia. 
 +
 +===== Esercizi su RMI Callbacks =====
 +
 +=== Esercizio 1: Gestione elezione ===
 +
 +Modificare l’Esercizio 1 dell'esercitazione precedente in modo che il server notifichi ogni nuovo voto ricevuto a tutti i clients che hanno votato fino a quel momento. La registrazione dei clients sul server avviene nel momento del voto.
 +
 +=== 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'argomento (esempio: giardinaggio)‏
 +  -  registrazione ad un forum, di cui è specificato l'argomento
 +  -  inserimento di un nuovo messaggio indirizzato ad un forum identificato dall'argomento (es: è tempo di piantare le viole, indirizzato al forum giardinaggio)‏; il messaggio deve essere inviato agli utenti iscritti al forum
 +  - reperimento dell'ultimo messaggio inviato ad un forum di cui è specificato l'argomento. 
 +Quindi il messaggio può essere richiesto esplicitamente dal client oppure può essere notificato ad un client precedentemente registrato.
 +
 +
 +===== 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, e visualzza tutte le
 +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/private con i vostri dati
 +(che andranno associate al server nel keystore) ed estrarre il certificato che va importato in
 +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'Esercitazione del 1/12 in modo che la comunicazione tramite RMI sia sicura.
 +
 +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/keystore) 
 +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.1227107206.txt.gz · Ultima modifica: 19/11/2008 alle 15:06 (17 anni fa) da Andrea Corradini

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki