Concetti Chiave
- La comunicazione server-client in un'applicazione TCP prevede l'apertura di un socket su una porta e l'attesa di richieste da parte del client.
- La classe SimpleServerSocketManager consente di gestire le comunicazioni tramite metodi come .riceviRichiesta(), .inviaRisposta(String msg) e .chiudi().
- Il processo di comunicazione si articola in una serie di passaggi chiave, dall'attivazione del server e client alla ricezione e risposta delle richieste.
- Gestire più client contemporaneamente richiede una maggiore complessità rispetto alla gestione di un singolo client, rendendo necessario un approccio più elaborato.
- Il server chiude il socket dopo aver inviato la risposta, permettendo di ripetere il processo per ogni nuova richiesta ricevuta.
Che cos'è la comunicazione server-client?
Vista dalla parte server la comunicazione potrebbe essere più complessa; infatti se ci trovassimo nel caso di gestire più di un client la cosa risulterebbe leggermente più difficile. Se tuttavia dobbiamo gestire solo un utente per volta allora la cosa si fa semplice, infatti si procederebbe in questa maniera:
- Su una porta TCP viene aperto un socket e si rimane in attesa di una richiesta;
- Una volta raggiunto da una richiesta il server procede con l’elaborazione e invia la risposta prodotta;
- Il socket viene chiuso e si ricomincia da capo;
Gestione del socket
Per il lato server si può utilizzare la classe SimpleServerSocketManager il cui costruttore è:
Ogni volta che andiamo a creare un nuovo oggetto della classe, un socket viene messo in ascolto sulla porta “port” del calcolatore in cui è in esecuzione l’applicazione lato server. I metodi della classe sono:
- .riceviRichiesta () = riceve la richiesta dal client connesso attraverso il socket;
- .inviaRisposta (java.lang.String msg) = invia la risposta prodotta, al client connesso attraverso il socket;
- .chiudi () = chiude il socket;
Riassunto del processo
Ora che abbiamo capito il funzionamento di entrambi i lati, server e client, possiamo riassumente la loro comunicazione così:
1. Server = attiva il server creando il socket;
2. Client = attiva il client creando il socket;
3. Client = invia una richiesta;
4. Server = riceve la richiesta;
5. Server = elabora la richiesta e produce la risposta;
6. SERVER = invia la risposta;
7. Client= riceve la risposta;
8. Client= elabora la risposta e la presenta all’utente;
Domande da interrogazione
- Qual è il processo di comunicazione tra server e client in un'applicazione TCP?
- Quali metodi offre la classe SimpleServerSocketManager per gestire le comunicazioni?
- Cosa succede se il server deve gestire più di un client?
La comunicazione inizia con il server che attiva un socket su una porta TCP e attende una richiesta. Una volta ricevuta, elabora la richiesta e invia una risposta al client, che a sua volta elabora e presenta la risposta all'utente (come descritto nel riassunto del processo).
La classe SimpleServerSocketManager offre tre metodi principali: .riceviRichiesta() per ricevere la richiesta dal client, .inviaRisposta(String msg) per inviare la risposta al client, e .chiudi() per chiudere il socket (come indicato nella sezione sulla gestione del socket).
Se il server deve gestire più di un client, la comunicazione diventa più complessa, poiché il server deve gestire simultaneamente più richieste, mentre nel caso di un solo utente la gestione è più semplice e lineare (come spiegato nella sezione sulla comunicazione server-client).