Client - Gaia-Barberio-Peano-5Ci/ChatClientServer GitHub Wiki

DESCRIZIONE CLIENT

La composizione della cartella ChatClient è la seguente:

  • ChatClient: è la classe principale che esegue il progetto

  • GUI(Interfaccia utente grafica)

  • Inviare: contiene UDPSocket e il suo metodo per inviare i pacchetti

  • Ricevere: contiene UDPSocket e il suo metodo per ricevere i pacchetti


Un client utilizza un DatagramSocket che è una tipologia di socket che utilizza una connessione basata sul protocollo UDP. Ciò significa che l’invio dei dati avviene mediante il trasferimento di piccoli datagrammi, senza garantire il corretto ordine d’arrivo e la correttezza dell’informazione. Il client e il server non instaurano una vera a propria connessione, ma il client comunica direttamente con il server, quando vuole.

Con DatagramSocket nomeSocket = new DatagramSocket() si crea un socket per l'invio dei messaggi.

Il DatagramSocket viene utilizzato in due modi:

1. Per "parlare": quando l'utente desidera inviare un messaggio utilizza il pulsante "Invia". Il pulsante Invia chiama il metodo di invio del client che consente a DatagramSocket di inviare un DatagramPacket al socket specificato (indirizzo IP e porta). In altre parole, questo pulsante chiama un metodo che recupera semplicemente il messaggio scritto dall'utente nel campo di input e lo invia al server.

2. Per "ascoltare": non appena un client si connetterà ad un server, inizierà ad attendere di ricevere messaggi dal server. Una volta ricevuto uno, il messaggio verrà visualizzato nella sezione di output.


Con DatagramPacket sendpack = new DatagramPacket(buffer, buffer.length, InetAddress.getLoopbackAddress() , numeroPorta); si crea un datagram packet che invia il pacchetto con il buffer che abbiamo precedentemente creato utilizzando il codice e nel buffer si inseriscono i dati da inviare con i comandi:

  • buffer1 = message.getBytes();
  • buffer2 = username1.getBytes();

Inoltre, per inviare il pacchetto in arrivo dal client si utilizza client.send(nomeDatagramPacket).

I comandi nomeDatagrampacket.getAddress() e nomeDatagrampacket.getPort() permettono di risalire all'indirizzo IP e alla porta con i quali il pacchetto è stato inviato, quindi permettono di scoprire il mittente del messaggio in arrivo.