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

    [JAVA]Gestione eccezzioni socket

    Ciao ragazzi,
    ho un thread in java che,ogni tanto manda un comando al server (tramite socket)!
    io vorrei che pero questa socket,nel caso il server non esiste non fermi il programma...come devo gestire le eccezzioni??c'è qlc modo o devo verificare prima se esiste il server???

    Il client è cosi:

    public void start(){
    //Connessione della Socket con il Server
    Socket socket = null;
    try {
    socket = new Socket("127.0.0.t", 7777);
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //Stream di byte da passare al Socket
    DataOutputStream os = null;
    try {
    os = new DataOutputStream(socket.getOutputStream());
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
    String userInput = "PROVA";
    try {
    os.writeBytes(userInput + '\n');
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //Chiusura dello Stream e del Socket
    try {
    os.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    try {
    socket.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }


    Eccoo..io ogni tanto richiamo questa funzione,voglio che , se il server non esiste, cmq nn blocca il mio programma!!!
    avete qualche idea??
    grazie mille

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non si vede neanche che il codice è stato autogenerato...

    Ad ogni modo, se noti il codice autogenerato c'è questo bel pezzetto di codice:
    codice:
    catch (UnknownHostException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
    }
    Che letteralmente significa: Cattura l'eccezione che si solleva se l'host è sconosciuto (in pratica, se non esiste).

    Così com'è postato il codice fa proprio schifo (scusa la durezza del termine, ma non ne ho trovato uno più delicato che dicesse la stessa cosa). E qui non sto dando la colpa a te ma chi ti ha spinto ad usare un editor che autogenera il codice (e, per vie trasversali, a quel "gran genio" che ha progettato un codice simile).

    Chiunque programmi una applicazione client/server sa bene che se il server verso cui ci si collega non esiste, c'è ben poco da fare: non si fa nessun tentativo di lettura dalla socket! Per cui, tutto il codice che viene dopo le due catch dovrebbe essere inserito all'interno del catch principale o, quantomeno, in un metodo separato che venga richiamato al suo interno.


    PS: La prossima volta che posti del codice, inseriscilo all'interno dei tag [*CODE] e [*/CODE] (senza gli asterischi), così risulta più leggibile.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Hai perfettamente ragione sul codice...nel senso che lho copiato dentro cosi comè da eclipse e quello è stato il risultato...

    non ho pero ben capito la tua ultima affermazione ...
    non ho capito se mettendola dentro quel tipo d eccezzione mi si blocca o meno...cioè : alla fine la cosa è fattibile?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Allora, questa dovrebbe essere la struttura portante:
    codice:
    try {
       // Eseguo la connessione col server
       socket = new Socket("127.0.0.t", 7777); 
    
       // Se sono arrivato qui, significa che
       // la connessione è andata a buon fine
    
       ...  // faccio tutto il resto
    } catch (UnknownHostException uhe) {
       // Qui la connessione non è andata a buon fine
       // Che faccio? Visualizzo un messaggio all'utente?
    
    } catch ( ... ) {
    }
    
    // A questo punto la connessione col server non c'è.
    // Aspetto e riprovo?
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    ok grazie mille

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.