Methode readline de BufferedReader se bloque

m3allem58 Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   -  
m3allem58 Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 293
 
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   Statut Membre Dernière intervention  
 
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