Ciao a tutti.

Sto realizzando un piccolo giochetto online... dove ho costruito un client in Flash e un Application Server in Java.

Il lavoro sembra andare a meraviglia... il client fa login sull'Application Server, seleziona la tipologia di gioco etc. Per ogni client si collega, creo un Thread diverso che si occupa di ricevere i dati dal client e di spedirne di nuovi.
Quindi il tutto funziona a meraviglia se un client specifico chiede qualcosa al server e riceve una risposta direttamente.

Il problema nasce quando un client A fa una richiesta al server... e successivamente alla richiesta l'ApplicationServer deve spedire una risposta a tutti (o parte di essi) i client.
Questa cosa non riesco a farla.. riesco solo al rispondere al client che mi invia una richiesta... ma non so inviare una risposta a più client contemporaneamente.

Sapreste dirmi come procedere?

Grazie mille per l'aiuto

Questo è il codice commentato. L'ultima funzione che vedete (fai_qualcosa) dovrebbe inviare dei dati ad alcuni dei client. Ma non ci riesco.

codice:
/*
 * DICHIARAZIONE DELLE VARIABILI GLOBALI
 */
 // Creo un istanza Thread per il Listener delle connessioni.
 // Ho messo il listener in un Thread a parte per evitare che il software resti congelato
 SocketListenerThread socketListener = new SocketListenerThread();
 

/*
* THREAD
* Che si occupa di gestire l'ascoltatore delle connessioni
*/
class SocketListenerThread extends Thread {    
    @Override
    public void run() {
        try {
            // Avvio l'ascoltatore per le connessioni
            ServerSocket serverSocket = new ServerSocket(5432); 
            // Avviso che il server è Online
            // IL SERVER è ORA IN ASCOLTO
            //Ciclo infinito di ascolto delle connessioni dei client
            while(true) {
                // L'Accept si occupa di accettare le connessioni in ingresso.
                // Il thread resta fermo fino a quando non si collega un client
                Socket socket = serverSocket.accept();
                // Collegato un client, creo un nuovo Thread nel quale apro un socket per questo client
                SocketThread socketThread = new SocketThread(socket);
                // Eseguo il codice di inzializzazione del Thread
                socketThread.start();                    
             }
         }catch(IOException ioe){
             // Se si verifica un errore del Listener
             // Mostro un avviso          
         }
     }
}
 
 
 
 
/* 
 * SOCKET
 * Creazione di una classe per il Multrithreading
 */
class SocketThread extends Thread  {
    // Creo il socket per il client che si è appena connesso
    private Socket socket;
    // Creo le variabili che contengono i dati del Client
    private String socket_name;
    // Creo un metodo di inizializzazione del socket
    public SocketThread (Socket socket) {
       // Copio il socket creato in fase di connessione del client, nel socket di questo Thread
       this.socket = socket;
    }
        
    //esecuzione del Thread sul Socket
    @Override
    public void run() {
        try {
            // Creo un DataInputString per ricevere le stringhe dei dati inviate dai Client
            BufferedReader socketIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            // Creo un PrintStram per inviare stringhe ai client
             PrintStream os = new PrintStream(socket.getOutputStream());
            // Creo un ciclo infinito per prelevare i comandi del Client ed eseguirne le operazioni
            // Solo nel momento in cui il Client eseguirà il Logout, chiuderò il ciclo
            while(true) {
                 try {
                     // Resto in attesa di una stringa inviata dal Client
                     //String userInput = is.readLine();
                     String userInput = socketIn.readLine();
                     // Ricevuta la stringa, la ripulisco da dati nulli all'inizio e alla fine
                     userInput = userInput.trim();
                     // Verifivo il comando inviato dal Client, per eseguire le operazioni richieste
                     if (userInput.equals("logout") == true) {
                     	break;
                     } else if (userInput.equals("fai_qualcosa") == true) {
                     	fai_qualcosa();
                     }
        	     } catch (Exception e) {
                 	// Si è verificato un errore
                    break;
        		}
    		}
    		// Il Client ha eseguito il Logout
    		// Chiudo il DataInputString e il PrintStream
    		os.close();
    		socketIn.close();
    		// Chiudo il Socket della connessione
    		socket.close();
		} catch (IOException e) {
           // Si è verificato un errore
        }
   }
}






public void fai_qualcosa() {
	
	// COME SPEDISCO UN RISULTATO A TUTTI I CLIENT???
	
	// DEVO SPEDIRE UN MESSAGGIO AD OGNI THREAD DEI CLIENT...

}