Implementare client e server UDP in grado di realizzare un classico

Transcript

Implementare client e server UDP in grado di realizzare un classico
Implementare client e server UDP in grado di realizzare un
classico conto alla rovescia
Realizzare, scrivendo codice portabile, un’applicazione client in C che legga da tastiera un valore
intero n e spedisca tale valore ad un server identificato dal nome dell’host e da un numero di porta
specificato inizialmente. Realizzare inoltre un’applicazione server in C che per ogni n ricevuto,
spedisca allo stesso client i valori n-1, n-2,…, 1, 0 in sequenza come pacchetti diversi.
La comunicazione tra client e server deve avvenire utilizzando il protocollo UDP (senza
connessione). Realizzare il server come applicazione iterativa: riceve la richiesta di un client, gli
fornisce il servizio e solo quando ha terminato va a servire altre richieste.
Usando UDP si è soggetti ai rischi dovuti a un protocollo non affidabile, tuttavia poiché l’esercizio
probabilmente sarà eseguito su reti universitarie in cui difficilmente si hanno perdite di pacchetti, il
server da realizzare deve simulare l’effetto dovuto alla perdita dei pacchetti.
Il client d’altro canto deve calcolare il numero di pacchetti persi e il numero di quelli ricevuti fuori
ordine e visualizzarlo alla fine del processo. Dopo ciascun invio, il client attende la risposta del
server per un periodo predefinito di tempo altrimenti assume che il pacchetto inviato sia andato
perduto. Poiché UDP è un protocollo inaffidabile il client non può aspettare all’infinito, dunque
nell’implementazione del client bisogna far in modo che la ricezione del pacchetto abbia un tempo
limite di attesa (ad esempio un timeout di un secondo).
Suggerimento per la gestione del timeout:
La modalità più opportuna per la gestione del timeout durante l’operazione di ricezione lato client è
utilizzare la funzione alarm la cui signature è la seguente:
unsigned int alarm(unsigned int secs)
Per approfondimenti consultare il libro di testo pagina 56.
Se nei sistemi Windows la funzione alarm non dovesse essere supportata, si può simulare la
gestione del timeout in questo modo:
il server quando casualmente decide di considerare un pacchetto perso invece di non effettuare la
sendto di risposta invia un altro pacchetto speciale (che inizi con la parola chiave LOST), il client
invece di utilizzare la funzione alarm effettuerà una normale recvfrom e si accorgerà che in realtà il
pacchetto sarà considerato perduto in quanto inizierà con la parola chiave LOST.
MODALITA’ DI CONSEGNA:
Inviare una email con oggetto esonero a
[email protected]
in cui si indica nome e cognome e matricola.
L’email deve contenere come allegato il progetto eclipse contenente il sorgente e non il file
eseguibile. (indicare nell’email se si è utilizzata nella creazione del progetto eclipse una piattaforma
differente da windows)