0

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

服务器

 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();

谢谢!

4

2 回答 2

1

当我第一次做套接字时,我也犯了同样的错误。

不要PrintWriterBufferedReader. 它们不相容。通过评论,PrintWriter实际上隐藏了关键异常,因此它们不应该用于网络。相反,使用DataInputStreamandDataOutputStream进行通信。

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

writeUTF然后,使用and发送和接收readUTF,如下所示:

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

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

原因与 UTF 编码有关;aBufferedReader需要某种字符串编码,但PrintWriter它没有给出。因此,读/写挂起。

于 2013-04-25T21:13:19.377 回答
0

方法 readLine() 需要一个行尾字符“\n”也许这是你的问题

于 2014-05-29T23:32:14.587 回答