Prossima revisione | Revisione precedente |
informatica:sol:laboratorio13:esercitazioni:esercitazione9 [22/04/2013 alle 09:39 (12 anni fa)] – creata Susanna Pelagatti | informatica:sol:laboratorio13:esercitazioni:esercitazione9 [08/05/2013 alle 07:02 (12 anni fa)] (versione attuale) – [Esercizio 5: Un server e molti client (multithreaded con socket)] Susanna Pelagatti |
---|
| |
==== Esercizio 3: Un server ed un client ==== | ==== Esercizio 3: Un server ed un client ==== |
Realizzare un processo server ed un processo client. I due processi intergiscono utilizzando due pipe con nome: //clientserver// e //clientp//. Il server crea la pipe clientserver (se non esiste), la apre e si mette in attesa di messaggi da parte del client. Ogni messaggio è costituito da un double. Per ogni messaggio ricevuto ''x'', il server calcola ''x*x'' e invia il risultato su //clientp//. La sequenza di messaggi termina quando il figlio chiude la pipe //clientserver//. Le pipe devono essere rimosse dal file system alla terminazione dei due processi. | Realizzare un processo server ed un processo client. I due processi intergiscono utilizzando due pipe con nome: //clientserver// e //clientp//. Il server crea la pipe clientserver (se non esiste), la apre e si mette in attesa di messaggi da parte del client. Ogni messaggio è costituito da un double. Per ogni messaggio ricevuto ''x'', il server calcola ''x*x'' e invia il risultato su //clientp//. La sequenza di messaggi termina quando il client chiude la pipe //clientserver//. Le pipe devono essere rimosse dal file system alla terminazione dei due processi. |
| |
==== Esercizio 4: Un server e molti client ==== | ==== Esercizio 4: Un server e molti client ==== |
==== Esercizio 5: Un server e molti client (multithreaded con socket) ==== | ==== Esercizio 5: Un server e molti client (multithreaded con socket) ==== |
| |
Estendere l'esercizio precedente in modo che il server accetti la connessione da piu' processi client. Ogni client all'avvio decide quanti messeggi inviare (casualmente fra 1 e N_MSG_MAX). Tutti i messaggi inviati contengono il PID del processo client che li invia. Il srever stampa tutti i messaggi ricevuti sullo standard output. | Creare un server che utilizzi le socket AF_UNIX e piu' thread concorrenti per gestire un numero di client. Ogni client all'avvio decide quanti messeggi inviare (casualmente fra 1 e N_MSG_MAX). Tutti i messaggi inviati contengono il PID del processo client che li invia. Il srever stampa tutti i messaggi ricevuti sullo standard output. |
| |
Il server e' realizzato usando piu' thread. Un thread //dispatcher// che accetta le connessioni dai vari client e un thread //worker// per ogni client. Il thread //worker// viene attivato appena la connessione si stabilisce e si occupa di leggere i messaggi del client e stamparli sullo stdout. Quando il client termina l'invio (EOF) il thread //worker// corrispondente termina e libera la memoria occupata. | Il server e' realizzato usando piu' thread. Un thread //dispatcher// che accetta le connessioni dai vari client e un thread //worker// per ogni client. Il thread //worker// viene attivato appena la connessione si stabilisce e si occupa di leggere i messaggi del client e stamparli sullo stdout. Quando il client termina l'invio (EOF) il thread //worker// corrispondente termina e libera la memoria occupata. |
| |
==== Esercizio 8: Get HTTP ==== | ==== Esercizio 8: Get HTTP ==== |
Scrivere un programma C che scarica la home page dal server ''131.114.11.34'' inviando una richiesta | Scrivere un programma C che scarica la home page dal server ''173.194.35.31'' inviando una richiesta |
<code> | <code> |
#define REQUEST "GET / HTTP/1.0\r\n\r\n" | #define REQUEST "GET / HTTP/1.0\r\n\r\n" |