J'ai du code Java qui effectue des requêtes via des sockets à partir d'un serveur écrit en C++. La communication est simplement que le code java écrit une ligne pour une requête et le serveur écrit alors une ligne en réponse, mais parfois il semble que le serveur ne répond pas, j'ai donc implémenté un timeout basé sur ExecutorService qui essaye de tomber et redémarrez la connexion.Comment faire pour supprimer/redémarrer une connexion client à un serveur de socket flaky
Pour travailler avec la connexion Je garde:
Socket server;
PrintWriter out;
BufferedReader in;
réglage si la connexion est une question de:
server = new Socket(hostname, port);
out = new PrintWriter(new OutputStreamWriter(server.getOutputStream()));
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
S'il n'y avait pas le code de délai d'attente de la demande/réception étapes sont tout simplement:
String request="some request";
out.println(request);
out.flush();
String response = in.readLine();
Quand je reçu un délai d'attente que je tentais de fermer la connexion avec:
in.close();
out.close();
socket.close();
mais l'une de ces fermées semble bloquer et ne jamais revenir. Quelqu'un peut-il me donner une idée pourquoi l'un d'eux bloquerait et quelle serait la bonne façon d'abandonner la connexion et de ne pas se retrouver avec des problèmes de fuite de ressources?
Je n'ai pas essayé d'appeler setSoTimeout(), cependant, il semble que cela n'affecte qu'un appel en lecture, si je suis bloqué dans l'appel en écriture (ce qui me semble être le fait que out.close() bloque également) ça ne m'aidera pas - correct? –