执行一次后卡在reader.readLine()上

时间:2018-12-09 19:20:20

标签: java sockets bufferedreader infinite-loop

我已经在这个问题上进行了一段时间的研究,但似乎无法解决这个问题。根据我的运行情况,我不断陷入for循环或while循环中。如果这是重复的邮件,我深表歉意,但是,我已经审查了pagethis以及其他几个邮件,但仍无法解决问题。

我设置了一些测试打印以查看正在执行什么,并且它在第一次迭代中运行得非常好,但是在那之后它将卡在reader.readLine()上。在这种情况下,它只需要进行一次迭代,因为readLine()将消耗其读取的行,这意味着我认为的下一行将为null,而while循环将终止,但显然并非如此。

还可以对一个writer.flush()使用多个writer.write(string)吗?很好奇,因为我还尝试过使用一次刷新在服务器中分离两个消息变量,但仍然遇到卡住的相同问题。

客户:

    while(!message.equals("Quit") || !message.equals("quit"))
    {
        System.out.println("Test1");
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        System.out.print("Message to send: ");
        message = scanIn.nextLine();
        System.out.println("Test2");
        writer.write(message + "\r\n");
        writer.flush();
        String serverMsg;
        System.out.println("Test3");
        for (String line = reader.readLine(); line != null; line = reader.readLine())
        {
            System.out.println(line);
            System.out.println("Test4");
        }
        /*while ((serverMsg = reader.readLine()) != null)
        {
            if(message.equals("quit") || message.equals("Quit"))
            {
                break;
            }
            System.out.println("Test4");
            System.out.println(serverMsg);
        }*/
        System.out.println("Test5")
    }
    System.out.println("Test6");

服务器:

System.out.println("Server: Running");
    ServerSocket mySocket = new ServerSocket(8189);
    Socket socket = mySocket.accept();
    while (true)
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));   
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        String message = reader.readLine().trim();
        String message2 = message;
        message = ProjectSQL.avgFromSQL(message.substring(0,1), message.substring(1,2));
        message2 = ProjectSQL.avgFromSQLCurrent(message2.substring(0,1), message2.substring(1,2));
        writer.write(message+"  "+message2+"\r\n");
        writer.flush();
    }

我的文件的输出是这个image

0 个答案:

没有答案