Login
Cerca all'interno di JavaPortal
Help
Home Page Documentazione Forum Progetti Partner Pubblica!
Documentazione > Tutorial > UNA CHAT OPENSOURCE
Hide
Best Practices
EJB
Frameworks
Howto
J2EE
J2ME and Wireless
J2SE
JSP e Servlet
Java Application Server
Java IDE/Tools
Java Media
Java Security
Java Sys Admin
Java e XML
Java e SQL
OpenSource Java
Patterns
Repository
Tesi
UML
Web Services
Slide
White Paper di jws.it
project management
Eventi
Groovy

Hai una tesi in Java?
Tesine preparate
per esami?
Pubblica tutto su
JavaPortal!

Scrivi al nostro staff


Master the Boss


Chi controlla il passato controlla il futuro..
..Chi controlla il presente controlla il passato. George Orwell


L’ARCHITETTURA JINI


Rss Feed
Home Page
Articoli
News
Forum
Classi

  Visualizza Commenti (1) Aggiungi Commento    
Add to Shortcuts
 
Vota l'articolo
UNA CHAT OPENSOURCE
By Jonathan Di Nardo
23 luglio 2005

  UNA CHAT OPENSOURCE
Program Thread
Program Messaggi Pubblici E Connessioni Private
Program Messaggi privati con più utenti
Program Disconnessione Finestra Privata
Program Brevi Cenni Sull'Installazione

Per realizzare un’applicazione chat, è indispensabile un linguaggio che ci consenta di connettere diversi computer in rete e di utilizzare al meglio le funzionalità del protocollo TCP/IP. Si ha la possibilità di realizzare questo lavoro vari linguaggi di programmazione attualmente a disposizione, ma se riuscissimo a realizzare un’applicazione che funzioni in qualsiasi macchina con sistemi operativi differenti ed in grado di funzionare con un semplice browser la soluzione ottimale è indubbiamente java. Tra le numerose funzionalità messe a disposizione da questo flessibile linguaggio utilizzeremo le socket che ci permetteranno di effettuare operazioni I/O tra i vari computer. Nella realizzazione di questa chat ho realizzato due applicazioni, una lato client, per la precisione un applet, ed una lato server.

Fig. 1 UNA CHAT OPENSOURCE

In figura A, abbiamo tre client collegati a un server. Ognuno di loro si collega per mezzo dell’indirizzo e della porta messa a disposizione dal server. Quando una connessione riesce, il server si riporta in ascolto per un altro client(accept). Il server per comunicare con gli utenti già connessi e nello stesso tempo essere disponibile per nuovi collegamenti, deve utilizzare i Thread.



Thread top
Osservando la figura A notiamo che per ogni utente collegato, il Server istanzia un oggetto User che implementa Runnable sul quale si costruirà di conseguenza un Thread. Il metodo run() di User è un ascoltatore in grado di accettare, in qualunque momento, richieste dal client abbinato. Ogni volta che si crea un oggetto User, cioè quando un client entra in comunicazione con il server, esso viene memorizzato in un vettore. Quando il server invierà messaggi agli utenti si appoggerà al vettore. Se un utente volontariamente si disconnette, invia un messaggio speciale di chiusura, il server riconoscendo il comando, chiuderà la socket, “ucciderà” il Thread e rimuoverà l’oggetto User dal vettore. In caso la connessione per errore dovesse cadere, Il server al momento dell’operazione di I/O solleverà un’eccezione, che catturata permetterà di effettuate le operazioni di chiusura come già menzionato.


Messaggi Pubblici E Connessioni Private top

Spedire un messaggio in pubblico è un’operazione abbastanza semplice: Quando un utente invia un messaggio, questo viene trasmesso al server, che navigando nel vettore provvede a inoltrare il messaggio agli altri: Le difficoltà iniziano con la chat privata, poiché c’è il problema di come gestire in un applet la sicurezza. Infatti le Applet non possono comunicare tra loro, salvo queste non si trovino sulla stessa macchina o siano regolarmente certificate. Ho preferito non utilizzare certificati, nonostante la soluzione adottata risulti più complessa. Si osservi lo schema in figura B:

Fig. 2 UNA CHAT OPENSOURCE

Nello schema abbiamo sempre i tre client collegati. Il client Mario nel comunicare con il client Giorgio, invia al server un messaggio speciale “/:PVTCHAT GIORGIO” (processo 1), la cui particolare sintassi impone al server di effettuare una comunicazione privata con Giorgio. Il server, navigando nel vettore degli utenti, trova il client Giorgio (processo 2), di conseguenza invia ai due uno speciale messaggio di convalida, seguito dal nome dell’utente di riferimento (figura C processo 3); ciascun utente apre per sé una finestra privata per comunicare con l’altro.

 

Fig. 3 UNA CHAT OPENSOURCE



Messaggi privati con più utenti top

Ogni utente può aprire più finestre in privato, perciò, ogni client memorizza in un vettore tutte le connessioni in corso. Per visualizzare il messaggio privato, il destinatario deve prima essere in grado di riconoscerne la provenienza. Il formato dei dati è composto dal nick del mittente e dal testo. Il Client, in base ai dati, trova nel proprio vettore il nome del mittente e visualizza il messaggio nella finestra abbinata.

Fig. 4 UNA CHAT OPENSOURCE

In questo caso abbiamo solo due utenti è comunque chiaro il formato del messaggio che viene inviato. Nella schema Giorgio scrive a Mario “Salve come va?”), invia al server (processo 1) il comando speciale “/:PRIVATE” seguito dal nome dell’utente in riferimento(Giorgio) e dal messaggio, il Server capisce che si tratta di testo in privato, cerca l’utente(processo 2), e risponde al client Giorgio inviando dei dati(processo 3). IIl Client Giorgio interpreta il comando speciale, legge il nome dell’utente di provenienza (Mario), navigando nel vettore trova la finestra privata corrispondente e ne visualizza il messaggio. Se l’utente Giorgio deve rispondere a Mario il processo è identico.



Disconnessione Finestra Privata top
l processo di chiusura della chat privata è simile a quello di apertura. Quando un client vuole disconnettersi cliccando sul pulsante di chiusura, invia al server un messaggio speciale di chiusura (/:CLOSE_W) seguito dal nome utente in riferimento. Il server interpreta il comando e notifica la richiesta inviando agli utenti interessati il comando di chiusura. Ad esempio per chiudere una connessione privata tra Giorgio e Mario il server invia a ciascun utente un messaggio come riportato in questa tabella.
Dal lato Mario Dal lato Giorgio

CLOSE<-
GIORGIO

CLOSE<-
MARIO

Soltanto adesso i client potranno chiudere la finestra privata associata al nome utente ricevuto.


Brevi Cenni Sull'Installazione top
Per il Server abbiamo 2 classi che sono:
  • JServer
  • User
Per il Client abbiamo:
  • JClient
  • JConnect
  • PrivateChat
  • InputClient
  • un file html che include l’applet
Possiamo provare la chat in locale o in rete.

Nel caso volessimo provarla in rete dobbiamo per prima cosa collegarci, lanciare il server (JServer.class) e reperire in esecuzione l’indirizzo IP visualizzato sullo schermo. In JClient.java è presente la variabile stringa server a cui va assegnato l’indirizzo prima menzionato. A questo punto dobbiamo copiare tutti i file compilati del client (compreso quello html) nella directory root dove punta il WebServer, lanciare quest'ultimo e permettere a qualcuno di collegarsi.
Nel caso, invece, volessimo provare la chat in locale possiamo usare l’appletviewer ma per lanciare più istanze dell’applet nella stessa macchina dobbiamo disabilitare il controllo dell’InetAddress in Jserver.java (Seguire i commenti sul sorgente).

A questo punto ho concluso l’applicativo è tutto da provare e comunque miglioramenti in futuro sono sicuramente previsti.

Scarica il codice sorgente: JClient.zip - JServer.zip



 Attachments List
Generic DocumentJServer.zip
Generic DocumentJClient.zip
Username:
Password:
To sign up for an account, click register... Register
Hide





Powered By



Campagna Anti-IF


Skin


PARTNER
Zio Budda
HostingJava


LICENZA



Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati sotto licenza Creative Commons

Sitemap  © 2002-2004 Copyright Information. Privacy . Today is domenica 1 agosto 2010