Remote compressor (client - server application)

Compressor-client:  compressor_client

Compressor-server: compressor_server

Tale progetto è stato sviluppato e testato su FreeBSD (www.freebsd.org).

Il progetto consiste nello sviluppo di un'applicazione client/server. Client e server comunicano tramite socket TCP. Il server è concorrente e la concorrenza è implementata con i thread POSIX. Il thread main rimane perennemente in attesa di nuove connessioni e le smista ad un pool (insieme) di thread che hanno il compito di gestire le richieste.
L’applicazione consente ad un client di mandare file ad un server per poi farsi restituire un archivio (tar), compresso con un algoritmo di compressione scelto dal client, contenente tali file. A tale scopo vengono realizzati due programmi, compressor-server dal lato server e compressor-client dal lato client.


Lato client


Il programma compressor-server è un programma interattivo che consente al client:

•    la scelta dell’algoritmo di compressione

•    la scelta del nome dell’archivio

•    la possibilità di visualizzare le configurazioni scelte

•    l’invio di uno o più file al server

•    la ricezione di un archivio (tar) compresso con i file mandati dal client stesso

Il comando per aprire una sessione di lavoro ha la seguente sintassi:


        compressor-client <host-remoto> <porta>


dove host-remoto è l’indirizzo IP della macchina dove gira il server compressor-server e porta è la porta su cui è in ascolto il server. Una volta mandato in esecuzione, compressor-client stampa su video un messaggio che informa il client dell’avvenuta connessione e successivamente fa apparire sullo schermo un prompt (remote-compressor >). Successivamente l’utente può digitare i comandi per interagire con il server. I comandi che possono essere mandati in esecuzione sono i seguenti:

• help: tale comando mostra a video una breve guida dei comandi disponibili.

• configure-compressor [compressor]: tale comando configura il server in maniera tale da impostare l’algoritmo di compressione scelto. Gli algoritmi di compressione sono due: bzip2 e gnuzip. Una volta eseguito il comando il server risponde con un messaggio di successo/errore che verrà visualizzato sul client in modo da permettere all’utente di capire se la configurazione dell’algoritmo di compressione abbia avuto successo o meno.


• configure-name [name]: questo comando imposta il nome dell’archivio che vogliamo ricevere. Anche in questo caso il server risponde con un messaggio per capire l’esito del comando.


• show-configuration: tale comando restituisce il nome scelto per l’archivio e il compressore, se tali parametri non sono stati ancora configurati mostra quelli di default.


• send [file]: tale comando prende come parametro il path del file locale che deve essere inviato al server (local-file). Per eseguire tale operazione il client deve aprire il file local-file e andarne a leggere il contenuto. In caso di errore nell’apertura del file è stampato a video un opportuno messaggio di errore. Una volta letto il file, il client invia al server un comando opportuno fatto seguire dal contenuto del file. Il server prende i dati inviati dal client e li inserisce all’interno del file remote-file (mantiene il nome originale). In caso di errore durante la creazione del file, il server stampa su video un messaggio di errore e invia al client un messaggio opportuno. Il client riceve tale messaggio e lo visualizza. Il file remote-file è una copia esatta del file local-file (usare l’utility diff per verificare se i due file sono uguali). Nel caso in cui il server non abbia i diritti per eseguire l’operazione richiesta, è spedito al client un messaggio opportuno che lo informa sui problemi incontrati dal server. Questo parametro può essere richiamato n volte per ogni file che vogliamo inserire nell’archivio.


• compress [path]: questo comando crea il tar.gz oppure il tar.bz2 dei file mandati con il comando send e crea il file compressed-remote-file con il nome scelto attraverso il comando configure-name. Il server aprirà tale file, lo leggerà, e invierà al client il contenuto. Il server comunicherà al client anche il nome del file. Il client salverà il file nel path specificato. Come per il comando send sia server che client gestiranno tutte le eccezioni e stamperanno a video lo stato delle operazioni (successo/errore e tipo). Per esempio se si esegue il comando compress senza aver mai eseguito una send ovviamente il server restituirà un errore. Se si esegue invece questo comando senza aver eseguito i comandi di configure-* il server utilizzerà delle impostazioni di default:
o nome:archivio o compressore:gnuzip. Una volta mandato l’archivio al client il server provvederà ad eliminare tutti i file temporanei.


• quit: tale comando causa la terminazione della sessione di lavoro iniziata con il comando compressor-client. Più precisamente tale comando chiude il socket con il server ed esce. Il server deve visualizzare un messaggio che attesta la disconnessione del client.


Lato server


Il processo compressor-server rappresenta il server del servizio remote-compressor. Tale processo rimane perennemente in ascolto di richieste di connessione provenienti dai client. Quando un client si connette, compressor-server attiva un thread dal pool a cui delegare la gestione del servizio offerto e torna ad attendere altre richieste di connessione. Appena un client si connette, il server visualizza un messaggio che indica che il client con indirizzo IP x.x.x.x si è connesso sulla porta yy. La sintassi del comando compressor-server è la seguente:


       compressor-server <porta>

dove porta è la porta su cui si deve mettere in ascolto il server. I processi che gestiscono il servizio offerto ai client devono visualizzare tutte le informazioni utili per capire che tipo di operazioni vengono
richieste dai client. Oltre a questo visualizzano anche i messaggi di errore di cui abbiamo discusso nei punti precedenti.

 

Compressor-client:  compressor_client

Compressor-server: compressor_server

 

PER ULTERIORI INFORMAZIONI SUL SOFTWARE NON ESITATE A CONTATTARMI:
Contact Me