Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    aggiornamento client connessi ad un server

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

  2. #2
    Up please

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    alla fine suppongo che devi aggiungere dei controlli in più

    non ho visto il tuo codice (scusa ma mi rifiuto di leggere codice non ben indentato), ma se fai il logout devi fare una richiesta al server che deve provvedere ad eliminarti

    logout == richiesta al server

    se non hai fatto il logout, ma per qualche motivo non sei loggato, controlla questi casi.
    Se guardi bene l'API socket

    http://download.oracle.com/javase/1....et/Socket.html

    trovi qualcosa che ti interessa (ad occhio e croce keepalive dovrebbe fare al caso tuo)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.