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(); }

Rispondi quotando