我正在尝试让我的客户端连接到我的服务器,并根据命令将一些字符串发送回客户端。目前,该应用程序连接并可以很好地将字符串发送到服务器。但是,当我发送指示服务器发送回来的命令时,它会挂起。我发现当客户端尝试读取从服务器发送的行时会出现问题。
服务器
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();
谢谢!
答案 0 :(得分:1)
当我第一次做插座时,我有效地this same mistake。
请勿将通过评论,PrintWriter
与BufferedReader
一起使用。它们是不兼容的。PrintWriter
实际上隐藏了关键异常,因此它们不应该用于网络。相反,请使用DataInputStream
和DataOutputStream
进行通信。
client = new Socket(hostname, port);
inStr = new DataInputStream(client.getInputStream());
outStr = new DataOutputStream(client.getOutputStream());
然后,使用writeUTF
和readUTF
发送和接收,如下所示:
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”可能是你的问题