J’utilise un serveur et un client où le serveur envoie une chaîne avec un nombre inconnu de \ n à l’intérieur. Ex:
foo1 \n foo2 \n foo3
ou
foo1 \n foo2
Sur le client, en raison de la nature bloquante de socket, je ne peux pas essayer / intercepter nextLine (), et j’ai besoin d’un moyen de savoir combien de \ n il y a côté client avant qu’un bloc soit créé. Je voudrais éviter de changer le serveur, y a-t-il quelque chose que je puisse faire côté client?
J’ai essayé hasNext (), hasNextLine () mais ils semblent aussi bloquer avant de retourner un résultat
Autres questions similaires dans le titre:
Scanner.nextLine () bloque lors de l’utilisation de InputStream depuis Socket
Quand Scanner.nextLine () est-il bloqué?
Un moyen pourrait être d’ envoyer le nombre total d’octets ou de caractères à lire, avant d’envoyer le message, puis de l’autre côté, vous lisez d’abord le nombre total d’octets / caractères à lire sans bloquer, puis vous lisez le contenu du message .
En d’autres termes, vous pouvez implémenter un protocole simple pour envoyer et lire vos messages au lieu de vous fier uniquement aux caractères de fin de ligne, ce que vous ne pouvez évidemment pas faire dans votre cas.