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)