PDA

Visualizza la versione completa : [JAVA] Gestione eccezioni socket


heavy&blues
02-03-2006, 09:47
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

LeleFT
02-03-2006, 13:54
Non si vede neanche che il codice stato autogenerato... :dh:

Ad ogni modo, se noti il codice autogenerato c' questo bel pezzetto di 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. :ciauz:

heavy&blues
02-03-2006, 14:00
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?

LeleFT
02-03-2006, 14:05
Allora, questa dovrebbe essere la struttura portante:


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. :ciauz:

heavy&blues
02-03-2006, 14:08
ok grazie mille

Loading