LABORATORIO DI PROGRAMMMAZIONE DI RETE

ESERCIZI ASSEGNATI - A.A. 2003-2004


Ogni esercizio deve essere inviato all'indirizzo ricci@di.unipi.it, entro 15 giorni dalla data di assegnazione.


Esercizio n. 1
Massimo (2 marzo)              (Ripasso programmazione multithreaded).

Si carichi una matrice quadrata M(n*n) con numeri interi. Si vuole calcolare il massimo di ogni riga
della matrice. A questo scopo si devono attivare n threads. Il thread ti calcola il massimo della riga di
indice i della matrice data.

Esercizio n. 2 Asta (9 marzo)                     (Ripasso programmazione Multithreaded)  

Realizzare un programma che simuli un'asta a cui partecipano n utenti. Ogni utente viene implementato
mediante un diverso thread. Ogni utente propone un importo tra 1 e 1000 euro e lo comunica agli altri.
Quando tutti gli utenti hanno effettuato la loro richiesta, ogni therad deve stampare l'indice del vincitore
e la differenza tra la sua offerta ed il valore offerto dal vincitore.

Esercizio n.3  (9 marzo)                              (NsLookUp)

Si vuole realizzare un programma JAVA che consenta di tradurre indirizzi IP in nomi simbolici
di hosts e viceversa. E' possibile utilizzare questo programma secondo due diverse modalita'.
Nel primo caso, l'utente passa come parametro, a linea di comando, il nome simbolico di
un host oppure un indizizzo IP e ne ottiene la traduzione. L'utente puo' anche utilizzare una modalita'
interattiva. In quest'ultimo caso, viene letta da standard input una sequenza di nomi simbolici/indirizzi IP
e se ne effettua la traduzione. L'immissione dei dati termina quando l'utente inserisce la stringa "EXIT"

Esercizio n. 4 SimpleProtocol (16 marzo)    (Programmazione Client/Server con protocollo TCP)
Realizzare una applicazione Client/Server definita come segue. Il server SimpleServer pubblica un
socket su una porta il cui numero e' passato come argomento da riga di comando, oppure, se
il numero di argomenti passati e' uguale a zero, sulla porta prefissata 1528. Accettata la connessione da
parte del client, SimpleClient, il server visualizza l'indirizzo IP e la porta da cui il client si e' connesso, poi
invia al client la stringa "CIAO SEI CONNESSO", quindi si mette in attesa di un messaggio da SimpleClient.
Il client, SimpleClient si connette alla porta pubblicata dal server, attende un messaggio da SimpleServer e stampa
la stringa ricevuta. Quindi manda il messaggio"OK" al Server. Al termine di questo protocollo
la connessione viene chiusa. Impostare opportuni time-outs sulle connessioni. Gestire le eccezioni
in modo da rilevare l'esatta causa per cui si e' verificata la eccezione. Utilizzare il protocollo TCP.

Esercizio n.5 (23 marzo)             (Programmazione Client/Server con protocollo TCP)
Implementare un sistema che gestisca un registro di classe in rete. Il sistema comprende un server
multithreaded e diverse istanze di clients che si connettono al server.
Il registro di classe riporta una entrata per ogni alunno. Ogni entrata riporta la matricola dell'alunno,
il numero di assenze fatte, il numero di quelle giustificate, il numero di rapporti subiti.
Il server legge inizialmente le informazioni relative agli alunni da un file e le memorizza in
una tabella realizzata come un Hashtable. Ogni client puo' richiedere al server informazioni relative
ad ogni alunno. Il protocollo client/server prevede che prima il client invii la matricola dell'alunno, e
che il server verifichi che esista un alunno con quella matricola. Successivamente il
client puo' richiedere informazioni riguardo a quell'alunno (n.assenze, n.assenze giustificate, etc)
oppure modificare una di queste informazioni.

Esercizio n.6 (6 aprile)                (Implementazione protocollo UDP affidabile)
Progettare una applicazione che prevede un server che pubblica un socket UDP su un indirizzo noto, accetta messaggi
provenienti da questa porta e ne effettua l'eco.
Ogni client invia al server una sequenza di messaggi, contenenti il testo del messaggio ed un identificatore che identifica univocamente
ogni messaggio tra quelli spediti. Dopo aver inviato un messaggio, il client attiva un time-out sulla ricezione dell'echo al messaggio msgi.
Nel caso in cui il time out scatti prima di ricevere l'echo di msgi, il client continua a spedire ulteriori messaggi.
E' necassario che nella fase di ricezione dell'echo del messaggio msgi, vengano scartati eventuali echos relativi
a messaggi spediti in precedenza. Poiche' la perdita/il ritardo di pacchetti UDP e' un evento comune su WAN, ma non su LAN, occorre
prevedere nel server per simulare la perdita/ritardo di tali pacchetti

Esercizio n.7 (20 aprile)            (Utilizzo del Multicast)
Scrivere un programma TimeServer che invia su un gruppo di  multicast la data e l'ora ad intevalli regolari.
Scrivere poi il programma TimeClient che si unisce al gruppo di multicast, riceve per 10 volte la data e l'ora e
la stampa

Esercizio n.8 (20 aprile)            (Serializzazione oggetti)
Modificare l'esercizio n.5 in modo da usare gli ObjectStreams per la comunicazione tra Client e Servers

Esercizio n.9 (27 aprile)            (Utilizzo multicast + Invio Oggetti su connessioni UDP)
Si consideri una applicazione composta da m servers Magazzino1, ..., Magazzinom ed n clients Client1, ...,Clientn.
Ogni Client ed ogni server e' allocato all'interno di uno spazio virtuale bidimensionale ed puo' essere individuato
dalle sue coordinate cartesiane all'inteno di questo spazio.
Ogni Magazzino possiede un elenco di articoli, ognuno caratterizzato dal suo codice e dalla quantita' presente in magazzino(scorta).
Le informazioni riguardanti gli articoli vengono caricate da un file. Ogni magazzino invia periodicamente le sue
coordinate ad un gruppo di multicast M a cui ogni client si collega all'inizio della propria esecuzione. Quando un client
riceve una informazione da M, la scarta se la ha ricevuta precedentemente, altrimenti la memorizza in una
struttura dati opportuna.
Ogni client riceve dall'utente, in modo interattivo, il codice e la quantita' di un prodotto e richiede tale prodotto al
magazzino piu' vicino, ttamite una connessione UDP. Il Magazzino invia al client un ack, nel caso possieda tale
prodotto in quantita' sufficiente, altrimenti invia un nack. Il client visualizza la risposta e, nel caso di nack, provvede
ad inviare una ulteriore richiesta al Magazzino piu' vicino, scelto tra i rimanenti. Il procedimento termina quando il
Client riceve una risposta positiva da un magazzino, oppure quando sono stati consultati tutti i magazzini.
Per inviare oggetti su collegamenti UDP utilizzare serializzazione come visto in classe.

Esercizio n.10 (5maggio)            (Programmazione client server basata su RMI)
Si vuole implementare un sistema che implementi un servizio per la gestione di forum in rete. Un forum e' caratterizzato
da un argomento su cui diversi utenti possono scambiarsi opinioni via rete. Il sistema deve prevedere un server RMI che fornisca
le seguenti funzionalita':
a) apertura di un nuovo forum, di cui e' specificato l'argomento
b) inserimento di un nuovo messaggio indirizzato ad un forum identificato dall'argomento
c) reperimento dell'ultimo messaggio inviato ad un forum di cui e' specificato l'argomento.
Si devono definire almeno le seguenti classi: