【问题标题】:While loop doesn't break after reading multiple line of text with BufferedReader in Java Socket在 Java Socket 中使用 BufferedReader 读取多行文本后,循环不会中断
【发布时间】:2022-10-06 11:45:38
【问题描述】:

我试图将多行代码从客户端发送到服务器。

这是服务器端的代码

            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            out = new PrintWriter(client.getOutputStream(), true);

            //read client input
            //multi line 
            //https://stackoverflow.com/questions/43416889/java-filereader-only-seems-to-be-reading-the-first-line-of-text-document?newreg=2f77b35c458846dbb1290afce8853930
            String line = \"\";
            while((line =in.readLine()) != null) {
                System.out.println(line);
            }
            System.out.println(\"is it here?\");

这是客户端的代码:

    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter out = new PrintWriter(socket.getOutputStream(),true);

    while (true) {
        System.out.print(\"> \");

        //content server input command (put, lamport clock, message)
        String command = keyboard.readLine();
        if (command.equals(\"quit\")){
            break;
        }
        //read from CSDB/txt1.txt
        String message = readFileReturnString(\"CSDB/txt1.txt\", StandardCharsets.UTF_8);
        System.out.println(message);
        //send to clientHandler through PrintWriter
        out.println(command + \" 3 \\n\" + message);

        //receive response from ClientHandler (lamport clock)
        String serverResponse = input.readLine();
        System.out.println(serverResponse + socket);
    }

服务器端能够打印出从客户端发送的所有文本。但是,while 循环不会中断,并且 System.out.println(\"is it here?\");从未被执行过。

我可以知道为什么以及如何解决这个问题吗?

  • 您需要关闭套接字。
  • 但我想重用这个套接字。因为我可能不止一次地将消息从客户端发送到服务器。
  • 然后你需要告诉服务器它什么时候应该退出循环。你可能会发送特殊的字符串或其他东西。
  • 或者使用非阻塞
  • @g00se 它无济于事。

标签: java sockets while-loop bufferedreader java-io


【解决方案1】:

您的客户端正在等待服务器的一些响应。但是服务器不发送任何响应。服务器只写入System.out。服务器必须使用out 编写响应。

        in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        out = new PrintWriter(client.getOutputStream(), true);

        //read client input
        //multi line 
        //https://stackoverflow.com/questions/43416889/java-filereader-only-seems-to-be-reading-the-first-line-of-text-document?newreg=2f77b35c458846dbb1290afce8853930
        String line = "";
        while((line =in.readLine()) != null) {
            System.out.println(line);
            out.println(line);  // send Server response
        }
        System.out.println("is it here?");

【讨论】:

    【解决方案2】:

    @塔莱克斯 然后你需要告诉服务器它什么时候应该退出循环。你可能会发送特殊的字符串或其他东西。

    这工作正常。

            String line = "";
            while((line =in.readLine()) != null) {
                System.out.println(line);
                if (line.equals("break") {
                break;
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多