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