Ott
04

Sorgenti del progetto di Laboraborio di Progettazione Integrata

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.

2 commenti a “Sorgenti del progetto di Laboraborio di Progettazione Integrata”


  1. 1 Carmine
    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

  2. 2 Paolo
    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 :-)

Lascia un commento

Nome

Email (non verrà pubblicata)

Sito web (opzionale)

Quanto fa 1 + 4 ? (protezione antispam)





Hai bisogno di un sito web?

Web&Dintorni

Vuoi collaborare a questo blog?

Ogni tipo di collaborazione è benvenuta!


Scrivimi all'indirizzo paolo.gatti@gmail.com o invia un messaggio sulla pagina Facebook!