Adesso Java comincia a farmi arrabbiare... è forse bacata la classe ObjectInputStream? Non è possibile che del codice identico funzioni 3 volte sì e una no...
Se tolgo le linee in grassetto tutto funziona perfettamente, se le lascio non compare mai la scritta "PASSO SUCCESSIVO"...codice:import java.io.*; import java.net.*; import java.util.Vector; public class Server extends Thread { private class GestioneClient extends Thread { private ObjectInputStream ois = null; private ObjectOutputStream oos = null; private Messaggio msg; private int id; public GestioneClient(InputStream is, OutputStream os, int id) throws Exception { this.id = id; ois = new ObjectInputStream(is); oos = new ObjectOutputStream(os); System.out.println("Costruttore"); } public void run() { try { while (true) { msg = (Messaggio) ois.readObject(); processaMessaggio(msg); } } catch (Exception e) { e.printStackTrace(); } } public void inviaMessaggio(Messaggio msg) throws Exception { oos.writeObject(msg); oos.flush(); } private void processaMessaggio(Messaggio msg) { Vector v = msg.getMessaggio(); for (int i=0; i<v.size(); i++) System.out.println( v.elementAt(i) ); } } private ServerSocket server; private InputStream is; private OutputStream os; private Vector clients; private Vector connessioni; private boolean attivo; private int id; public Server() { clients = new Vector(); connessioni = new Vector(); attivo = true; } public void run() { try { server = new ServerSocket(2525); while (attivo) { Socket c = server.accept(); System.out.println("Arrivata connessione numero " + clients.size() + 1); is = c.getInputStream(); os = c.getOutputStream(); id = clients.size(); clients.add( new GestioneClient(is, os, id) ); System.out.println("PASSO SUCCESSIVO"); ((GestioneClient) clients.elementAt(clients.size()-1)).start(); connessioni.add( new String("Connessione " + (connessioni.size() + 1) + "!") ); Messaggio msg = new Messaggio( (Vector) connessioni.clone() ); inviaNuovoVettore(msg); } } catch (Exception e) { e.printStackTrace(); } } private void inviaNuovoVettore(Messaggio m) { try { for (int i=0; i<clients.size(); i++) { ((GestioneClient) clients.elementAt(i)).inviaMessaggio(m); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String [] args) { Server s = new Server(); s.start(); } }
Qualcuno ha una vaga idea del perchè?
N.B.: Ho scritto una chat con del codice praticamente identico... la chat funziona perfettamente!!!
P.S.: Tralasciate il fatto che il messaggio sia costituito da un Vector... mi serviva solo per fare dei test.
Ciao.![]()



Rispondi quotando


, ma non posso ricostruirmi l'ObjectInputStream ogni volta: lo costruisco una volta e, ad ogni ciclo di while, rimango in attesa (su quell'ObjectInputStream) di un messaggio in arrivo dal Server (o dal client nel caso opposto)...