Bonjour à tous,
J'ai dans mon application une communication avec un serveur. Ce serveur peut parfois fermer la connexion pour X raisons. Coté Java je reçois donc une exception broken pipe :
J'essai d'écrire mais la connection à été fermé par le serveur , j'ai donc l'exception broken pipe. De là j'appelle la methode de fermeture de mon client réseau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 try { this.client.getWriter().write(buffer); this.client.getWriter().flush(); } catch(IOException e) { this.client.close(); }
Or cette méthode de fermeture envoi normalement un message au serveur pour l'informer que l'on ferme la connexion. Message qui ne peut être envoyé à cause de l'exception précédente.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public void close() { if(this.socket != null && !this.socket.isClosed() { try{ this.writer.write(bufferCloseConnection); this.writer.flush(); this.writer.close(); this.reader.close(); this.socket.close(); } catch(IOException e) { e.printStacktrace(); } } }
D'ou ma question , comment gérer au mieux cette exception broken pipe ? Devrais je plutôt faire une seconde méthode de fermeture qui ne serait appelée que dans le cas ou la fermeture est non demandée par le client ?
Est il nécessaire de procéder au close() du writer/reader et de la socket sachant que la connexion à été fermé par le serveur ?
merci
Partager