Questa è una vecchia versione del documento!
Esercitazione 10
Socket AF_UNIX, comunicazione client-server. Server multithreaded e gestione di più connessioni utilizzando la SC select
. Per gli esercizi proposti si richiede di realizzare un Makefile.
Esercizio 1
Realizzare in C un programma client ed un programma server. I due processi intergiscono utilizzando socket AF_UNIX. Il client apre una connessione verso il server ed invia richieste (sotto forma di stringhe) corrispondenti ad operazioni aritmetiche (es. 2+1, 3/4 + 2/7, sqrt(5) + 3.14, …). Il server accetta una stringa alla volta e per eseguire l'operazione lancia un processo che esegue la calcolatrice “bc”. Il messaggio di risposta del server è una stringa contenente il risultato calcolato. La sequenza di operazioni termina quando il client riceve la stringa “quit” e chiude la connessione con il server.
Esercizio 2
Realizzare un programma C che implementa server che rimane sempre attivo in attesa di richieste da parte di uno o piu' processi client. Ogni client richiede al server la trasformazione di tutti i caratteri minuscoli di una stringa in caratteri maiuscoli (es. ciao –> CIAO). Per ogni nuova connessione il server lancia un thread POSIX che gestisce tutte le richieste del client e quindi termina la sua esecuzione quando il client chiude la connessione.
Per testare il programma implementare uno script bash che lancia un certo numero di client ognuno che invia una o piu' richieste al server multithreaded.
Possibile estensione: invece di attivare ogni volta un nuovo thread, gestire un pool di N threads ed effettuare lo scheduling delle richieste dei client sul pool di thread.
Esercizio 3
Realizzare un server analogo a quello dell'Esercizio 2, senza pero' usare i therad, ma utilizzando la chiamata di sistema select
per risolvere il non determinismo fra l'accettazione di nuove connessioni da parte dei client e la lettura dei messaggi dai client gia' connessi.