Skip to content

Applicazione Java che utilizza i DatagramSocket per implementare una comunicazione UDP unicast e multicast tra più MulticastPeer.

License

Notifications You must be signed in to change notification settings

matbagnoletti/MulticastUDPSocketChat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MulticastUDPSocketChat

Made by @matbagnoletti

Docenti: prof.ssa @mciuchetti e prof.ssa Fioroni

Corso TPSIT a.s. 2023/2024, ITTS A. Volta (PG)

Ultimo commit Linguaggio

Descrizione

Applicazione Java che utilizza i DatagramSocket per implementare una comunicazione UDP unicast e multicast tra più host MulticastPeer.

Requisiti

È possibile visualizzare le versioni già presenti sul proprio dispositivo mediante i seguenti comandi:

java -version
mvn -v

Installazione e utilizzo

  1. Scaricare il file compresso del progetto
  2. Estrarre il progetto
  3. Eseguire la classe di avvio:
    • Tramite IDE
    • Tramite terminale:
      1. Naviga nella root del progetto
      2. Esegui la build del progetto: mvn clean install
      3. Identifica il file jar nella directory /target/
      4. Esegui il programma: java -cp target/<nome-del-file-jar>.jar chat.RunMe

Struttura e funzionamento

Il progetto si compone da 5 packages:

  • Package comunicazione: Fornisce le classi-entità per la gestione della comunicazione tra MulticastPeer.
  • Package eccezioni: Fornisce una collezione di eccezioni specifiche.
  • Package gestione: Fornisce le classi-entità per specifiche operazioni di gestione del programma.
  • Package host: Fornisce le classi-entità necessarie alla gestione dei MulticastPeer.
  • Package utenze: Fornisce le classi-entità necessarie alla gestione degli oggetti Utente.

Utilizzo

Per poter utilizzare il programma è necessario:

  1. Creare un oggetto GroupChat e configurarlo opportunamente;
  2. Creare un oggetto MulticastPeer e configurarlo opportunamente con il GroupChat precedentemente creato;
  3. Invocare il metodo MulticastPeer.configura() e successivamente MulticastPeer.avvia().

Ad esempio:

   try {
        GroupChat groupChat = new GroupChat("230.19.6.5", 19065);
        MulticastPeer multicastPeer = new MulticastPeer("Matteo", false, groupChat);
        multicastPeer.configura();
        multicastPeer.avvia();
   } catch (Exception e) {
        ProjectOutput.stampa(e.getMessage(), OutputType.STDERR);
   }

Un oggetto GroupChat necessita di un indirizzo IPv4 di classe D e di un numero di porta valido (0-65535) su cui avviare il MulticastSocket.

Un oggetto MulticastPeer necessita, invece, di uno username, la modalità di log scelta (true per abilitare la modalità avanzata, false altrimenti) e del GroupChat a cui deve unirsi.

Interazione con l'utente

Il programma, tramite un Thread dedicato, sarà in continua attesa di ricevere comandi dall'utente tramite tastiera. L'avviso "# Terminale pronto all'invio di messaggi" segnalerà la disponibilità del programma a ricevere input dall'utente. I comandi vengono distinti dai normali messaggi attraverso il carattere $.

Elenco dei comandi:

  • $exit: termina l'esecuzione del MulticastPeer e del programma.
  • $help: stampa a video l'elenco dei comandi.
  • $utenti: stampa a video l'elenco degli utenti memorizzati in rubrica (presenti nel gruppo).
  • $stat: stampa a video le statistiche riguardo ai messaggi inviati in output. Tale funzionamento si basa sullo scambio di messaggi ACK.
  • $rn: permette di rinominare un utente memorizzato in rubrica.
  • $log: abilita e disabilita la modalità di log avanzata.

Digitando una generica sequenza di caratteri, invece, il programma interpreterà il testo come un messaggio da comunicare al GroupChat in modalità multicast.

Dopo che il programma ha opportunamente memorizzato in rubrica un generico utente del GroupChat dal quale si è ricevuto un generico messaggio, è possibile comunicare in modalità privata (unicast) con esso specificando, dopo il testo del messaggio, il suo nome utente.

Ad esempio:

   ciao > usernameDestinatario

Caution

La ricerca degli utenti in rubrica è di tipo case-sensitive: l'utente "matteo" è diverso dall'utente "Matteo".

Gestione dei MulticastPeer nel gruppo

A ogni MulticastPeer è associato un oggetto Utente. Per evitare conflitti di username, ogni utente è fornito di un proprio codice univoco UUID, che viene trasmesso insieme allo username. Attraverso metodi per la verifica dei duplicati, il programma rinominerà automaticamente utenti il cui username non risulta univoco.

Si consiglia di gestire le possibili eccezioni lanciate dal programma tramite il costrutto try-catch, affidando l'output dell'evento alla classe ProjectOutput. Il metodo ProjectOutput.stampa() richiede due parametri: il messaggio di errore e la tipologia di messaggio (in questo caso OutputType.STDERR). La gestione dei log è, invece, affidata alla classe ChatLogger. Per un più consapevole utilizzo di tali classi si consiglia la visualizzazione del package gestione.

Documentazione

L'intero progetto è stato opportunamente documentato secondo lo standard JavaDoc disponibile nella directory docs. Si consiglia di visualizzare il file index.html attraverso il proprio browser.

Licenza d'uso

Questo progetto (e tutte le sue versioni) sono rilasciate sotto la MB General Copyleft License.

About

Applicazione Java che utilizza i DatagramSocket per implementare una comunicazione UDP unicast e multicast tra più MulticastPeer.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages