Esercizi su socket - Infn
Esercizi su socket - Infn
Esercizi su socket - Infn
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Esercizi</strong>o 1<br />
Scrivere una applicazione client/server in cui:<br />
• Il client, in un ciclo infinito:<br />
– Legge una stringa da standard input<br />
– Invia al processo server la stringa.<br />
• Il server vi<strong>su</strong>alizza:<br />
– L'IP da cui si e' connesso il client<br />
– I messaggi testuali inviati dal client<br />
• Client e server terminano quanto l’utente digita la stringa “exit”<br />
Scrivere due verioni dell’esercizio.<br />
• Una prima in cui Client e server comunicano attraverso <strong>socket</strong> locali<br />
• Una prima in cui Client e server comunicano attraverso <strong>socket</strong> TCP.
<strong>Esercizi</strong>o 2<br />
Scrivere una applicazione client/server in cui il server accetta i seguenti<br />
comandi:<br />
• TIME: Il server invia al client l'ora corrente<br />
• DATE: Il server invia al client la data corrente<br />
• PORT: Il server<br />
– crea un nuovo <strong>socket</strong>, invia il numero di porta al client.<br />
Successivamente al comando PORT, tutte le comunicazioni<br />
avvengono <strong>su</strong>l nuovo <strong>socket</strong>.<br />
– Il client riceve dall'utente il comando da inviare al server<br />
Nota: Se un process esegue la listen <strong>su</strong> un <strong>socket</strong> <strong>su</strong> cui NON ha eseguito<br />
la bind, il sistema operativo associa una porta libera ca<strong>su</strong>ale. Il processo<br />
puo' ottenere il numero di porta assegnato dal sistema utilizzando la<br />
funzione getsockname()<br />
Client e server comunicano attraverso <strong>socket</strong> TCP
<strong>Esercizi</strong>o 3<br />
Scrivere una applicazione client/server in cui<br />
• Il server puo' gestire concorrentemente piu' client.<br />
– Quando il client si collega al server, viene creato un processo figlio<br />
che gestisce l'intera sessione per il client.<br />
– Il server riceve dal client una stringa ed invia al client l'indirizzo IP<br />
associato alla stringa.<br />
• Il client invia al server le stringhe lette da standard input<br />
– termina quando l'utente digita la stringa exit.<br />
Client e server comunicano attraverso <strong>socket</strong> TCP
<strong>Esercizi</strong>o 4<br />
Scrivere una applicazione client/server in cui<br />
• Il server puo' gestire concorrentemente piu' client.<br />
• Il client<br />
– Legge da standard input una espressione aritmetica<br />
e la invia al<br />
server<br />
– Il server esegue l'operazione ed invia il ri<strong>su</strong>ltato al client<br />
– Il client vi<strong>su</strong>alizza il ri<strong>su</strong>ltato.<br />
• termina quando l'utente digita la stringa exit.<br />
Client e server comunicano attraverso <strong>socket</strong> TCP
<strong>Esercizi</strong>o 5<br />
Scrivere una applicazione client/server in cui<br />
• Il client<br />
– Invia al server una stringa.<br />
– Vi<strong>su</strong>alizza le informazioni ricevute dal server.<br />
– termina quando l'utente digita la stringa exit.<br />
• Il server:<br />
– Riceve una stringa dal client.<br />
– Se la stringa corrisponde al nome di un file nella directory corrente,<br />
invia al client il contenuto del file.<br />
– Se la stringa corrisponde al nome di una sottodirectory della<br />
directory corrente, invia al server l’elenco dei file regolari contenuti<br />
nella sottodirectory indicata<br />
– Altrimenti invia l’elenco di tutti I file contenuti nella directory corrente.<br />
• Il server deve essere in grado di gestire piu’ client concorrentemente.<br />
Client e server comunicano attraverso <strong>socket</strong> TCP
<strong>Esercizi</strong>o 6<br />
Scrivere una applicazione client-server in liguaggio C in cui:<br />
• Il server:<br />
– Crea un processo figlio per ogni client<br />
– Il processo figlio riceve da client uno dei seguenti comandi<br />
• READ : Scrive <strong>su</strong>l <strong>socket</strong> il contenuto del file . Se il file non<br />
esiste, scrive <strong>su</strong>l <strong>socket</strong> “Non esiste”.<br />
• WRITE : Scrive nel file le informazioni lette dal <strong>socket</strong>.<br />
– Il processo figlio termina dopo l’esecuzione di un solo comando.<br />
• Il client<br />
– Riceve <strong>su</strong> riga di comando gli indirizzi di DUE server, IP1 ed IP2, ed il nome di un file<br />
.<br />
– Invia al primo server il comando READ <br />
– Invia al secondo server il comando WRITE <br />
Quando il client termina, il file deve essere presente <strong>su</strong>l server con indirizzo IP2. Il<br />
<strong>su</strong>o contenuto e’:<br />
• Il contenuto di <strong>su</strong>l server IP1, se questo file esiste<br />
• La stringa “Non esiste” se NON esiste il file <strong>su</strong>l server con indirizzo IP1.<br />
Client e server comunicano attraverso <strong>socket</strong> TCP.
<strong>Esercizi</strong>o 7<br />
Scrivere una applicazione client-server in liguaggio C in cui:<br />
• Il server:<br />
– Crea un processo figlio per ogni client<br />
– Il processo figlio riceve uno dei seguenti comandi<br />
• Il client<br />
• SH: Invia al client l’output dello script shell “/usr/bin/myscript.sh”<br />
• FS: Invia al client l’output dello comando “df”<br />
• EXIT: Termina<br />
– legge comandi da standard input<br />
– invia i comandi al server (Si as<strong>su</strong>ma che i comandi siano sempre<br />
corretti)<br />
– vi<strong>su</strong>alizza i messaggi ricevuti dal server<br />
– Termina quando l’utente inserisce “EXIT”<br />
Client e server comunicano attraverso <strong>socket</strong> TCP.
<strong>Esercizi</strong>o 8<br />
Scrivere una applicazione client/server in cui<br />
• Il client:<br />
– Legge dallo standard input una stringa (max 100 caratteri)<br />
– Invia la stringa al server;<br />
– Vi<strong>su</strong>alizza la risposta del server;<br />
– Termina quando l’utente digita “FINE”<br />
• Il server crea per ogni client un processo figlio:<br />
– Riceve dal client una stringa<br />
– Invia al client<br />
• Se la stringa corrisponde ad un file eseguibile<br />
• L’output del esecuzione<br />
• Se la stringa corrisponde ad una directory<br />
• Il numero di file regolari contenuti in essa contenuti;<br />
• Altrimenti invia l’intero -1.
<strong>Esercizi</strong>o 9<br />
Si scriva una applicazione client-server in C che simuli un call center.<br />
• Esistono due tipi di server: “Operatore” e “Scheduler”. Si as<strong>su</strong>ma che esistano al più N<br />
server di tipo “Operatore” e che esista esattamente un solo server di tipo “Scheduler”.<br />
• Quando un server “Operatore” viene eseguito:<br />
– si collega al server Scheduler inviando un numero di porta;<br />
– si mette in attesa di chiamate da parte degli utenti.<br />
• Il client “Utente”, richiede una connessione al server “Scheduler” il quale risponderà<br />
inviando:<br />
– l’indirizzo IP ed il numero di porta associato ad un operatore disponibile;<br />
– il messaggio “Server Busy” se tutti gli scheduler attivi sono occupati.<br />
• Se il client riceve un indirizzo valido:<br />
– apre una connessione con il server “operatore”;<br />
– legge stringhe da standard input;<br />
– invia le stringhe lette all’operatore;<br />
– vi<strong>su</strong>alizza le risposte dell’operatore<br />
– Termina quando viene digitata la stringa “fine”.<br />
• Il server “operatore” re-invia al client i messaggi ricevuti. Quando un client termina, il<br />
server operatore informa lo scheduler che e’ nuovamente libero.