ragazzi.. qualcuno sa aiutarmi per un'operazione di ping con java.
vi racconto:
Ho un metodo "aggiorna" che deve controllare sotto richiesta dell'utente i client che sono ancora connessi al server in quel momento.
concettualmente io faccio questo: scandisco la lista dei client connessi, e per ogni client che leggo mando un messaggio e poi mi metto in ricezione per attendere risposta.
Se la "in.readLine()" mi da eccezione su quella socket, allora vuol dire che il client non è connesso e quindi non posso leggere.
Il tutto funziona se faccio girare il client e il server sul mio computer. Se provo invece a fa girare client e server su PC diversi allora il metodo aggiorna non funziona più. Semplicemente non aggiorna nel caso in cui io chiuda un client su un PC e quindi nella mia lista dei client connessi continuo a vedere un client anche se questo non è più connesso.
metto il codice per farle vedere più o meno quello che ho scritto:
codice:
private void Aggiorna(){
 Iterator<Struttura> it=list.Iterator(); //Iteratore sulla lista di client connessi
 Struttura struct;
             //struttura per il salvataggio dei campi dei vari client
 System.out.println("GESTORE ADMIN -> Scandisco la lista"); 
 PrintWriter out=null;
 BufferedReader in=null;
 while(it.hasNext()){   // mentre ci sono client nella lista
 struct=it.next(); 
 try {
 out=new PrintWriter(struct.getSocket().getOutputStream());   //prendo la socket del client che in questo momento sto scandendo
 in=new BufferedReader(new InputStreamReader(struct.getSocket().getInputStream()));
} catch (IOException e) {
 e.printStackTrace();
 }
 out.println(ConstantType.REFRESH); //scrivo una piccolo messaggio sulla socket
 out.flush();
 try {
 in.readLine();   //provo a leggere da quella socket
 System.out.println("GESTORE ADMIN -> "+struct.getUser()+" "+struct.getIp()+" "    //se risponde allora client connesso
 +struct.getPort()+" Client connesso");
 } catch (IOException e) {
 it.remove();
 System.out.println("GESTORE ADMIN -> "+struct.getUser()+" "+struct.getIp()+" "
 +struct.getPort()+"Client non connesso");  //eccezione vuol dire che il client non è piu connesso.
 }
 }
 }


questo invece è il pezzo di codice del client che serve per gestire l'aggiornamento:
se ricevo il messaggio refresh dal server, gli rispondo per far capire che sono connesso.

codice:
if(msg.equals(ConstantType.REFRESH)){
 filewrite.println(time()+"Messaggio ricevuto: "+msg);
 filewrite.println(time()+"Invoco Aggiorna");
 out.println(ConstantType.END);
 out.flush();
}