Bonjour à tous,
Je travaille avec un serveur distant que je peux interroger sur une socket
J'ai les 2 méthodes suivantes (à la fin ) qui fonctionnent ....
Mais ... lorsque je ferme le flux de lecture (les 3 lignes dans la dernière méthode), il semble que le serveur ne reçoit pas le message de fin (MESSAGE_FIN) d'utilisation (ce qui fait que le nombre de thread augmente avec le tps ).
Si je commentes les lignes tous fonctionne bien, mais ça me dérange de ne pas fermer ces flux.
Je pensais que la lecture et l'écriture étaient relativement indépendantes.
ça ne semble pas être le cas.
Questions :
Est ce que j'ai fait quelque chose de mal ?
Quel est la bonne pratique sur ce point ?
Merci
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
17
18
19
20
21
22
23
24
25 public List send(IRequete requete) { List liste = new ArrayList(); OutputStream outputStream = null; PrintStream fluxSortieSocket = null; try { outputStream = socket.getOutputStream(); fluxSortieSocket = new PrintStream(outputStream); String message = requete.toMessage(); fluxSortieSocket.println(message); liste = readResponse(); fluxSortieSocket.println(MESSAGE_FIN); socket.close(); } catch (Exception e) { log(...) } finally { fluxSortieSocket.close(); try { outputStream.close(); } catch (IOException e) { logger.warn("...", e); } } return liste; }
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 private List readResponse() { InputStream inputStream = null; InputStreamReader inputStreamReader = null; BufferedReader fluxEntreeSocket = null; List liste = new ArrayList(); try { inputStream = socket.getInputStream(); inputStreamReader = new InputStreamReader(inputStream); fluxEntreeSocket = new BufferedReader(inputStreamReader); String line = fluxEntreeSocket.readLine(); logger.debug("Ligne réponse :"+line); Reponse creationReponse = Factory.creationReponse(line); while (creationReponse != null) { liste.add(creationReponse); line = fluxEntreeSocket.readLine(); creationReponse = Factory.creationReponse(line); } } catch (IOException e) { logger.error("...", e); } finally { try { // ICI ces 3 lignes posent problème fluxEntreeSocket.close(); inputStreamReader.close(); inputStream.close(); } catch (IOException e) { } } return liste; }
Partager