Visualizzazione dei risultati da 1 a 2 su 2

Discussione: thread socket

  1. #1
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568

    thread socket

    ciao a tutti, ho un grosso problema..
    sto sviluppando un server ftp :
    ad ogni connessione che riceve apre un nuovo thread con runnable e fin qui nessun problema..
    quando poi l'utente si disconnette (ad esempio con quit), vengono svolte delle operazioni particolari sul mio server.
    il problema che ho invece è che non riesco ad intercettare quando la connessione socket cade, ad esempio per una assenza di rete, e non vengono eseguite correttamente le operazioni di chiusura sul server..
    come posso fare ? qualche suggerimento / idea ??

    posto qui il codice..
    ho messo un commento a fianco alla riga che richiama le operazioni di disconnessione..
    purtroppo di li non passa però..

    codice:
    	public void run(){
    		
    		try {
    			
    			BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
    			String st="";
    	  
    			while(st!=null){
    				st = in.readLine();
    				if (st!=null) {
    					st = st.trim();
    					doCommand(st);
    				}
    			} // FINE CICLO WHILE
    			
    		}catch(IOException e) {
    			if (ses.logedIn)
    				bb.probeException(e, "Could not read from sessionnumber: " + ses.sessionNr + ". The username was: " + ses.getLogin() + ".");
    		}
    		
    		// CHIUSURA DEL SOCKET
    		try{
    			socket.close();
    		}catch(Exception e){
    			bb.probeException(e, "Cold not close the connection to sessionnumber: " + ses.sessionNr + ". The username was: " + ses.getLogin() + ".");
    		}
    		
    		bb.message("Fine connessione : " + ses.getLogin() + "(" + ses.logedIn + ")");
    		
    		dock.disconnect(this); // IN QUESTA RIGA NON PASSA SE MUORE LA CONNESSIONE 
    		
    		ses.us.userDisconnected(UserSessionObserver.USER_NORMAL_END);
    
    	  }
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  2. #2
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ci ho capito qualcosina di più..
    in caso di problemi sulla linea il socket rimane bloccato all'interno del ciclo

    codice:
    while(st!=null){
    				st = in.readLine();
    				if (st!=null) {
    					st = st.trim();
    					doCommand(st);
    				}
    			} // FINE CICLO WHILE
    in attesa di un comando che non riceverà mai, visto che in realtà la comunicazione client server si è interrotta...

    adesso ho trovato un'istruzione per generera un'eccezione ogni tot tempo di inattività..

    codice:
    			socket.setSoTimeout(10000);
    			BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
    			String st="";
    	  
    			while(st!=null){
    				
    				try{
    					st = in.readLine();
    					if (st!=null) {
    						st = st.trim();
    						doCommand(st);
    					}
    				}catch(InterruptedIOException timeout){
    
    					bb.message("Timeout connessione : " + ses.getLogin() + "(" + ses.logedIn + ")");
    					break;
    				}
    			}
    mi piacerebbe come ultima cosa trovare un modo per verificare se il socket è aperto..
    così ogni 10 secondi di inattività genero l'eccezione, controllo se il socket è ancora aperto e solo se non lo è chiudo ed esco dal ciclo..
    nessuno sa darmi una dritta ??
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

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 © 2026 vBulletin Solutions, Inc. All rights reserved.