2016-11-08 5 views
1

Ich benutze einen Server und einen Client, wo der Server eine Zeichenfolge mit einer unbekannten Anzahl von \ n innerhalb sendet. Ex:Java nextLine blockiert auf Socket

foo1 \n foo2 \n foo3 

oder

foo1 \n foo2 

auf dem Client aufgrund der Sperrung der Natur der Steckdose, kann ich nicht try/catch nextline(), und ich brauche einen Weg, um herauszufinden, wie Viele \ n gibt es Client-Seite, bevor ein Block erstellt wird. Ich möchte vermeiden, den Server zu ändern, gibt es etwas, was ich tun kann, Client-Seite?

Ich habe versucht, hasNext(), hasNextLine(), aber sie scheinen auch zu blockieren, bevor ein Ergebnis

Andere Fragen der Rückkehr, die in Titel ähneln:

Scanner.nextLine() blocks when using InputStream from Socket

When Does Scanner.nextLine() block?

Antwort

1

Ein Weg könnte sein, senden Sie die Gesamtmenge von Bytes oder Zeichen zu lesen, vor dem Senden der Nachricht, dann auf der anderen Seite, Zuerst lesen Sie die Gesamtanzahl der zu lesenden Bytes/Zeichen ohne zu blockieren, dann lesen Sie den Inhalt der Nachricht.

Mit anderen Worten, Sie könnten ein einfaches Protokoll implementieren, um Ihre Nachrichten zu senden und zu lesen, anstatt sich nur auf die Zeilenenden zu verlassen, wie Sie es in Ihrem Fall natürlich nicht können.