Почему моя программа работает бесконечно l oop, когда я пытаюсь прочитать многострочный ввод с TCP-сервера - PullRequest
0 голосов
/ 23 января 2020

Это мой TCP-клиент java код:

socket = new Socket("127.0.0.1", 8088);
out = new DataOutputStream(socket.getOutputStream());
inputStream = socket.getInputStream();
inputReader = new BufferedReader(new InputStreamReader(inputStream));
String result = "";
while (inputStream != null) {
    result += inputReader.readLine();
}
out.writeUTF(result);
System.out.println(result);

socket.close();
out.close();

while l oop выполняется бесконечно.

Мне нужно решение этой проблемы.

Ответы [ 3 ]

0 голосов
/ 23 января 2020

inputStream всегда имеет значение, т.е. не null, поэтому вы продолжаете цикл и добавляете.

Имеет ли это какой-то смысл? Вы можете проверить как inputReader.readLine() != null вместо:

string line;
while ((line=inputReader.readLine()) != null) {
    result += line;
}
0 голосов
/ 24 января 2020

Вам необходимо проверить, когда readLine() возвращает null, а не когда inputStream становится null (чего никогда не будет):

string s = inputReader.readLine();
while (s != null) {
    result += s;
    s = inputReader.readLine();
}

Или:

string s;
while ((s = inputReader.readLine()) != null) {
    result += s;
}
0 голосов
/ 23 января 2020

Вам нужно аннулировать ваш inputStream в течение времени, пока l oop, с некоторым условием, чтобы оно сломалось.

...