JAVA2222 ha scritto:
Ho già scritto il server multithread per gestire più client, e anche la parte client.
Innanzitutto avendo sul server una architettura multi-thread, DEVI assolutamente avere le idee chiarissime su tutte le questioni legate alla concorrenza, sincronizzazione (con il lock intrinseco degli oggetti o altro), "visibilità" delle modifiche, uso (eventuale) di collezioni thread-safe, ecc...
JAVA2222 ha scritto:
Ciò che non riesco a capire è come poter inviare ciò che viene scritto da un client a tutti gli altri client.
Questo
dipende molto dalla architettura generale. Sul server ciascun client è
servito da 1 thread al cui interno gestisci la connessione socket TCP che è quindi "permanente" per la durata della connessione dal client?
Allora si presume che ciascun thread abbia un "loop" in cui stia (quasi) perennemente in attesa di qualcosa dal rispettivo client. E quindi se ne deduce che NON è questo thread che può inviare qualcosa che arriva da
altri client.
Con una architettura del genere, si potrebbe avere 1 ulteriore thread X che invia il messaggio a TUTTI i client. Quando da un thread viene ricevuto un messaggio, questo potrebbe essere "dispacciato" al thread X ad esempio tramite una coda sincronizzata. Il thread X scoda il messaggio e lo invia a TUTTI i client. Come fare in modo che il thread X abbia le nozioni utili per inviare il messaggio su tutti i socket relativi ai client, è un altro discorso. Ma si può fare.