Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Socket non bloccante

  1. #1

    Socket non bloccante

    Ciao ! Sto facendo un programma CLIENT-SERVER che avvii il server e lo chiuda tramite pulsante, il server accetta connessioni da più client. Il problema e' che la chiusura del socket non avviene al meglio, infatti rimane bloccato nell'attesa di un client (ovvero a s.accept()). Non c'è un modo per farlo uscire dal blocco?
    Grazie mille...

    Il codice e' questo:
    codice:
    private boolean result=true;
    
    /*ALTRO CODICE*/
    try{
    s=new ServerSocket(PORT);//connetto la socket alla porta stabilita
    
    //se result e' uguale a true esci dal ciclo
    while(result){
               try{
                     socket = s.accept();/*si mette in ascolto del client*/
                    client=new ClientConnect(socket);
                    client.start();
              }//fine try
    	catch(IOException e){
    		break;
    	}//fine catch
                
    }//fine while
    }//fine try
    	catch(IOException e){
    		e.printStackTrace();
    	}
    	catch(InterruptedException e){
    		e.printStackTrace();
    	}
    	finally{
    		try{
    			socket.close();
    			s.close();
    		}
    
    void close(){
          result=false;//chiudo il server
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707

    Re: Socket non bloccante

    Originariamente inviato da boy123456
    Il problema e' che la chiusura del socket non avviene al meglio
    di che chiusura di socket stai parlando? la tua "socket = s.accept();" non è in un ciclo while?
    la close è esterna al ciclo while.

    infatti rimane bloccato nell'attesa di un client (ovvero a s.accept()).
    Non potrebbe essere altrimenti se vuoi accettare più client.

    Se vuoi far fare altro al server devi mettere la s.accept() in un thread...

    P.S. O forse intendi che quando chiami il metodo tuaclasse.close() (che non fa altro che impostare result a false) non riesci a sbloccare il server dalla accept?
    Non era molto chiaro...

  3. #3

    Re: Re: Socket non bloccante

    Originariamente inviato da c0der
    P.S. O forse intendi che quando chiami il metodo tuaclasse.close() (che non fa altro che impostare result a false) non riesci a sbloccare il server dalla accept?
    Non era molto chiaro...
    Si intendevo l'ultima cosa che hai detto.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Se vuoi sbloccare la accept chiami close() sul ServerSocket, vedi:
    http://docs.oracle.com/javase/7/docs...ml#close%28%29

    Quindi il tuo metodo diventa:

    codice:
    void close() {
          result = false;
          s.close(); // s è il ServerSocket
    }
    P.S. cambierei il nome "result" in "running", non ha senso il nome "result" per quella variabile.

  5. #5
    Originariamente inviato da c0der
    Se vuoi sbloccare la accept chiami close() sul ServerSocket, vedi:
    http://docs.oracle.com/javase/7/docs...ml#close%28%29

    Quindi il tuo metodo diventa:

    codice:
    void close() {
          result = false;
          s.close(); // s è il ServerSocket
    }
    P.S. cambierei il nome "result" in "running", non ha senso il nome "result" per quella variabile.
    Grazie mille!!! Finalmente funziona!!!

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.