11.04.2013 Views

Esercizi su socket - Infn

Esercizi su socket - Infn

Esercizi su socket - Infn

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!