La lecture de tous les commentaires à partir d'une prise en continu

Je suis en train d'écrire un simple Java application client/serveur pour mon propre usage. Il devrait permettre aux clients d'envoyer seule ligne de texte des messages et lire multiligne réponses. Ce type de communication doit être répétées plusieurs fois en utilisant la même connexion.

C'est ce que j'ai dans le client pour la lecture des réponses:

BufferedReader input = new BufferedReader(new InputStreamReader(server.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
    //processing here
}

Le problème, c'est que readLine() bloque une fois que le serveur envoie la première réponse et le client ne peut envoyer de nouveaux messages à cause de cela. C'est compréhensible. Un naïf solution pourrait être de faire le serveur le signal de la fin de sa production par l'envoi d'une sorte de particuliers connus de la chaîne de valeur dont le client serait alors de reconnaître et de mettre fin à la lecture de la boucle. Cependant, est-il une meilleure solution à ce problème?

Votre logique semble ok, lors de l'obtention d'une connexion vous attendre toute une ligne d'arrivée, et ensuite d'attendre la prochaine ligne. C'est exactement ce que vous décrivez vous le souhaitez. Si vous voulez seulement lire une ligne, supprimer le moment, mais que voulez-vous faire à la place?
La solution habituelle de ce traitement est de deux threads asynchrones; où on lit, l'autre écrit, et le thread principal conserve la manipulation de l'interface graphique. Et vous construire des choses sur les files d'attente, de sorte que l'interface utilisateur peut ajouter des messages d'une file d'attente que le thread d'écriture peuvent envoyer dès qu'il est libre.
Lindsjö: je veux lire TOUTES les lignes puis envoyer un nouveau message alors lire TOUTES les lignes de nouveau et envoyer un nouveau message... Le problème est que readLine blocs.
Ensuite, vous avez besoin d'un marqueur pour indiquer la fin de vos lignes actuelles. Ce que vous demandez pour l'instant est qu'il y aura un nombre inconnu de lignes, et ils vont prendre un inconnu de la période de temps à arriver, et après encore un autre, inconnu période de temps, il y aura un autre inconnu nombre de lignes et que vous voulez que votre programme de faire la distinction entre ces deux groupes de lignes.

OriginalL'auteur Ree | 2011-12-09