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... }