Java readline()保持套接字打开

时间:2013-04-25 21:10:24

标签: java android sockets client-server

我正在尝试让我的客户端连接到我的服务器,并根据命令将一些字符串发送回客户端。目前,该应用程序连接并可以很好地将字符串发送到服务器。但是,当我发送指示服务器发送回来的命令时,它会挂起。我发现当客户端尝试读取从服务器发送的行时会出现问题。

服务器

 PrintWriter out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
          out.println("GETDATA" + "\n");                
          out.flush();
          out.close();

客户端

BufferedReader fromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));                

        incomingLine = fromServer.readLine();
        Log.d("HERE", "NOT " + incomingLine);
        fromServer.close();

谢谢!

2 个答案:

答案 0 :(得分:1)

当我第一次做插座时,我有效地this same mistake

请勿将PrintWriterBufferedReader一起使用。它们是不兼容的。通过评论,PrintWriter实际上隐藏了关键异常,因此它们不应该用于网络。相反,请使用DataInputStreamDataOutputStream进行通信。

client = new Socket(hostname, port);
inStr = new DataInputStream(client.getInputStream());
outStr = new DataOutputStream(client.getOutputStream());

然后,使用writeUTFreadUTF发送和接收,如下所示:

public void send(String data) throws IOException {
    outStr.writeUTF(data); outStr.flush();
}

public String recv() throws IOException {return inStr.readUTF();}

原因与UTF编码有关; BufferedReader期望某个字符串编码,PrintWriter不会给出。因此,读/写挂起。

答案 1 :(得分:0)

方法readLine()期望行尾字符“\ n”可能是你的问题