Inizia il countdown degli esami: -8 alla fine, grazie all’esame dato oggi di Laboratorio di Progettazione Integrata. L’esame consisteva in un progetto e in una piccola relazione. Il progetto che io e il mio amico Carmine Savino abbiamo realizzato, è una chat pubblica e privata utilizzando un’architettura client/server. Vediamo “come funziona”:
SERVER
dopo aver compilato il server (gcc server.c -o server), per avviarlo e metterlo in ascolto delle connessioni dei client, basta eseguire:
$ ./server
nel terminale. Ad ogni connessione ed ad ogni disconnessione il server scrive in output un messaggio del tipo:
- “Connessione da FD”
- “Disconnessione da FD”
dove FD è il File Descriptor. Ad ogni nuovo client connesso, secondo se sia l’unico client online o l’n-esimo riceve un messaggio di benvenuto diverso. Ad esempio:
- “Attualmente sei l’unico utente connesso” (se è l’unico client connesso)
- “Sono attualmente connessi: ” a cui segue la lista di tutti gli utenti connessi. (se sono connessi più di un client)
Ogni messaggio che un client scrive, viene inviato al server e quest’ultimo si occupa di recapitarlo a tutti gli altri client connessi. Se è un messaggio privato (il server lo cattura perchè controlla se ha il prefisso /msg nick_destinatario), questo viene inviato solo al nick_destinatario e non agli altri client. Il server controlla altersì se il nick_destinatario è connesso alla chat, altrimenti torna un messaggio di errore al client che ha mandato il messaggio privato.
Il server tiene traccia di tutti gli utenti connessi e disconnessi tramite una struttura dati e un array dove vengono inseriti i nuovi utenti e, ogni volta che un utente si connette o si disconnette, invia un messaggio a tutti gli altri client connessi nella forma:
- “nick_utente è entrato in chat”
- “nick_utente è uscito dalla chat”
Il processo server è sempre in LISTEN e non si ferma fino a quando non viene killato.
CLIENT
dopo aver compilato il client (gcc client.c -o client), per connettersi alla chat, basta semplicemente eseguire il client, specificare l’host al quale connettersi e il nick che vogliamo; ad esempio:
$ ./client localhost OnE
A questo punto siamo a tutti gli effetti connessi alla chat e possiamo decidere di scrivere messaggi pubblici o privati:
- per inviare messaggi pubblici, basta scrivere un messaggio e dare invio
- per inviare messaggi privati, occorre dare il comando /msg nick_destinatario messaggio (nel caso in cui il nick_destinatario fosse errato o l’utente si fosse disconnesso nel frattempo, l’utente riceverà un messaggio di errore che lo informerà che il messaggio non è stato recapitato)
Il client termina la sua esecuzione quando l’utente “killa” il processo premendo contemporaneamente il tasto ‘CONTROL’ e il tasto ‘C’.
Dopo questa lunga e noisa spiegazione ecco il codice sorgente.
Una piccola nota sulla licenza in cui è distribuito il programma: esso è open source (in italiano tradotto come “software libero”) e distribuito sotto la licenza GPLv2 che riferisce alla libertà dell’utente di eseguire, copiare, distribuire, studiare, cambiare e migliorare il software purchè venga poi ridistribuito alla comunità .
P.S. il programma è stato utilizzato e testato sotto Linux e Mac OS X Tiger.
04 Ottobre 2006 alle 19:57 Quota
yea!!! un esame in meno alla laurea!!!! visto che anch’io leggo quello che scrivi! ci vediamo in facoltà ..e a dicembre pubblica anche tecnologie del web! ciao
05 Ottobre 2006 alle 15:50 Quota
Si certo, pubblicherò tutti i progetti che facciamo a meno che non ci siano problemi di licenza (vedi progetto di Sistemi Informatici Distribuiti con il codice di Della Penna non liberamente distribuito). Ci vediamo in facoltà , buon weekend :-)