【发布时间】:2015-03-13 14:12:01
【问题描述】:
该应用程序是一个基本的聊天客户端。 我有一个 线程 用于从服务器获取数据。
我想分别从服务器获取每个响应。 它仅在循环中断时才在控制台中打印(当我使用应用程序的其他部分发送“退出”时)。 因此,当“System.out.println”响应时它会立即打印整个缓冲区。
我怎样才能让它工作并分别打印每个响应?
谢谢!
编辑!!
服务器响应应在每行后包含“\n”,
它以这种方式对我有用。
没有“\n”,它只会等到循环中断。
有没有更好的方法来解决“\n”问题?
class ServerThread implements Runnable {
@Override
public void run(){
BufferedReader in = null;
Socket socket;
try
{
if (Thread.currentThread().isAlive()) {
sendString("exit");
Thread.currentThread().interrupt();}
InetAddress serverAddress = InetAddress.getByName(SERVER_IP);
socket = new Socket(serverAddress, SERVER_PORT);
outr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String serverResponse;
while((serverResponse = in.readLine()) != null)
{
System.out.println(serverResponse);
}
in.close();
outr.close();
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
【问题讨论】:
-
在
finally块中使用close() -
在您的服务器代码中,您可能不会在每个响应的末尾添加行分隔符,并且所有响应加起来为一行。
-
@Titus 服务器在每个消息后都会响应,当我使用 python 服务器检查它时,它可以正常工作。
标签: java android sockets chat bufferedreader