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 e' 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 prima in cui Client e server comunicano attraverso socket locali Una prima 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 crea 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 puo' 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 puo' 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 puo' gestire concorrentemente piu' client. Il client Legge da standard input una espressione aritmetica <operando1> <operatore> <operando2> 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 piu 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 <nomefile>: Scrive sul socket il contenuto del file <nomefile>. Se il file non esiste, scrive sul socket Non esiste. WRITE <nomefile>: Scrive nel file <nomefile> 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 <nomefile>. Invia al primo server il comando READ <nomefile> Invia al secondo server il comando WRITE <nomefile> Quando il client termina, il file <nomefile> deve essere presente sul server con indirizzo IP2. Il suo contenuto e : Il contenuto di <nomefile> sul server IP1, se questo file esiste La stringa Non esiste se NON esiste il file <nomefile> 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 Il client SH: Invia al client l output dello script shell /usr/bin/myscript.sh FS: Invia al client l output dello comando df EXIT: Termina 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 e nuovamente libero.