【问题标题】:Why my program is going on Infinite loop when i am trying to read multiple line input from TCP Server当我尝试从 TCP 服务器读取多行输入时,为什么我的程序会进入无限循环
【发布时间】:2020-05-09 15:40:11
【问题描述】:

这是我的 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 循环无限执行。

我需要解决这个问题。

【问题讨论】:

  • inputStream 在循环内永远不会被修改,它应该如何以及何时变为null

标签: java tcp socket.io infinite-loop tcpclient


【解决方案1】:

您需要检查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;
}

【讨论】:

    【解决方案2】:

    您需要在 while 循环中使用某些条件使 inputStream 无效,以使其中断。

    【讨论】:

      【解决方案3】:

      inputStream 总是有一个值,即它不是null,所以你不断循环和追加。

      这有意义吗?您可以改为查看 inputReader.readLine() != null

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

      【讨论】:

      • 每次循环迭代需要调用readLine()一次,而不是2次。
      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      相关资源
      最近更新 更多