BufferedReader.readline()无法按预期工作

时间:2016-06-06 09:13:54

标签: java android bufferedreader

我编辑了代码以便更好地解释。

我有Android应用程序,它是客户端和Java服务器。我试图从客户端向服务器发送信息,处理该信息并将结果发送回客户端。

我使用BufferedReaderInputStreamReaderDataOutputStream发送和接收邮件。

所以我的Client.java有这个代码:

      try {
            //Sending message to server
            DataOutputStream outToServer = new DataOutputStream(sock.getOutputStream());
            outToServer.writeBytes(messageString + '\n');
            outToServer.flush();
        } catch (IOException e) {
            System.err.print(e);
        }
        try {
            System.out.println("This line is showing");
            BufferedReader inFromServer = new BufferedReader(new InputStreamReader(sock.getInputStream()));
            String res;
            System.out.println("And this line is showing");
            res=inFromServer.readLine();
            System.out.println("But this never is");
            System.out.println("Received: " + res); //This line is never printed in console
         }catch (IOException e) {
            System.out.println(e); 
        }

我的Server.java有这个:

    try{
            System.out.println("Creating InputStream");
            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String message = inFromClient.readLine();
            System.out.println("Received: " + message);  //correct string received           
        } catch (Exception ex) {
            System.out.println("Creating InputStream failed");
            System.err.print(ex);
        }
        try{
            String response = "Response from server"
            DataOutputStream outToClient = new DataOutputStream(clientSocket.getOutputStream());
            outToClient.writeBytes(response + '\n');
            outToClient.flush();
            System.out.println("Sent to client: " + response);  //correct string is showing in console
        } catch(Exception ex) {
            System.out.print("Error! " + ex);
        }

问题是我的服务器正确地获取消息,这是可理解的字符串。它在控制台中显示它发送给客户端的内容,也是可理解的字符串。 但是,当我试图在客户端获取消息时,它什么也没做。

inFromServer.readline()不会向控制台抛出任何异常,我也不知道它为什么不起作用。 我尝试了inFromServer.toString(),然后我收到了一些东西,但它肯定不是从服务器发送的字符串。它类似于:

    java.io.BufferedReader@b3d109a0

我不知道自己做错了什么。从登录功能调用发送/接收功能,该功能从onPostExecute调用。我不知道如何从doInBackground中做到这一点。

1 个答案:

答案 0 :(得分:1)

  

BufferedReader.readLine()无效

哦,是的。您的错误在于尝试将阅读器转换为字符串,而不是使用已读取的行。

哟应该删除ready()测试。这毫无意义。

您还应该使用对称流。如果您在一端使用Readers,则应在另一端使用Writers,例如BufferedWriter。不是DataOutputStream

我建议这不是真正的代码,并且发送消息的末尾没有\n,这将解释readLine()阻塞直到不存在的行终止符到达,但您应该使用BufferedWriter而不是DataOutputStream进行重做,如上所述。