Newsgroup: it.comp.java
Titolo: Problema socket

buongiorno
dovendo realizzare un filesystem ho necessità di poter leggere e
scrivere da più socket per poter scambiare delle informazioni tra più
server.
vi posto un pezzo di codice. non riesco proprio a capire come mai non
mi fa la readLine().
//altro codice.....
 Vector<Socket> vec = new Vector<Socket>();
 Vector<Socket> ves = new Vector<Socket>();
 for (int i = 0; i < ip.length; i++) {
            Socket s;
            try {
                s = new Socket(ip[i], PORTA);
                if (s != null) {
                    vec.add(s);
                    System.out.println("Creata connessione con " +
ip[i]);
                    k--;
                }
            } catch (IOException e)  /*fai qualcosa */        }
        if (k != 1) {
            System.out.println("Mi metto in attesa");
            ServerSocket ss = null;
            try {
                ss = new ServerSocket(PORTA);
            } catch (IOException e) {       return;
            }
            int timeout = 30000;
            try {
                ss.setSoTimeout(timeout);
            } catch (SocketException e) {
               //fai qualcosa
            }
            Socket p = null;
            while (k != 1) {
                try {
                    p = ss.accept();
                    ves.add(p);
                    System.out.println("------CONNECTION
ESTABILISHED------");
                    k--;
                } catch (IOException e) {
                    return;
                }
            }
        }
//altro codice....
String dato = null;
 try {
            dato = "sono " + InetAddress.getLocalHost().toString() +
": ciao\n";
        } catch (UnknownHostException e) {
            //fai qualcosa
        }
        BufferedWriter out;
        BufferedReader in;
        String buf = null;
  for (int i = 0; i < vec.size(); i++) {
            try {
                out = new BufferedWriter(new
OutputStreamWriter((vec.get(i)).getOutputStream()));
                out.write(dato);
             } catch (IOException e) {
                System.err.println("Errore di OS");
            }
        }
for (int i = 0; i < ves.size(); i++) {
            do {
                try {
                    in = new BufferedReader(new
InputStreamReader((ves.get(i)).getInputStream()));
                    if (in.ready()) {
                        buf = in.readLine();
                    }
                } catch (IOException e) {
                    System.err.println("Errore di IS");
                }
            } while (buf != null);
        }


Che intendi esattamente per "non mi fa la readLn"?

 Che intendi esattamente per "non mi fa la readLn"?
intendo che non me la esegue e il programma rimane in attesa.


io, tanto per iniziare, metterei un bel buf=null come prima istruziine
dell'ultimo ciclo for...

Hai provato ad omettere il metodo booleano ready()???
sono tutti metodi sincronizzati, per qualche motivo secondo me rimane
in attesa di qualche altra operazione in esecuzione che ha messo un
lock.


potrebbe. in ogni caso qualche sana system out potrebbe dirci se
continua il loop all'infinito o se rimane in attesa su qualche
operazione di IO