Methode readline de BufferedReader se bloque

Fermé
m3allem58 Messages postés 58 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 7 janvier 2014 - Modifié par m3allem58 le 4/10/2013 à 12:36
m3allem58 Messages postés 58 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 7 janvier 2014 - 4 oct. 2013 à 18:43
Bonjour,

j'ai un programme client et un autre serveur qui communiquent en mode socket.
le client envoie un message au serveur et ça marche.
La réponse du serveur arrive aussi au client , je veux transformer le Stream au String mais ça bloque au niveau de la methode readLine, voici le code:


public static String fromStreamToString(InputStream inputStream) throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder out = new StringBuilder();
String line = null;
try {
if (reader.ready()) {
while ((line = reader.readLine()) != null) {
out.append(line);
}
}
} catch (IOException e) {e.printStackTrace();}

return out.toString();
}

ça débloque quand le programme serveur ferme la connexion socket.

merci.
A voir également:

2 réponses

arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
4 oct. 2013 à 15:43
La méthode readLine est normalement une méthode bloquante, donc qui va attendre l'arrivée d'un message pour le lire.

Ici d'après le code lorsque le serveur répond, la réponse est bien mise dans out, seul problème, tant que readLine n'est pas null, alors on attend un nouveau message.

Je ne sais pas ce que tu entends par débloque, mais s'il s'agit du fait que le programme est débloqué quand tu fermes le serveur, alors c'est tout à fait normal, puisque reader est basé sur l'input stream, lequel est je suppose basé sur la socket.

Donc socket fermée = input stream fermé = reader se basant sur null = déblocage
0
m3allem58 Messages postés 58 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 7 janvier 2014
4 oct. 2013 à 18:43
merci arth pour la réponse, ce que tu as dit est totalemnt juste.

au lieu de
out.append(line);
j'ai directement rempli une file d'attente avec le contenu de line et comme ça le reste du programme exploite le flux intercepté.

A+.
0