Java 如何正确使用带套接字的BufferedReader
该应用程序是一个基本的聊天客户端。 我有一个从服务器获取数据的线程 我想分别从服务器获取每个响应。 只有当我使用应用程序的其他部分发送exit时循环中断时,它才会在控制台中打印。 因此,当System.out.println响应时,它会立即打印整个缓冲区 我如何使它工作并分别打印每个响应 谢谢大家! 编辑 服务器响应应在每行后面包含\n 这对我来说很有用 没有\n,它只是等待循环中断 有没有更好的方法来避免此问题Java 如何正确使用带套接字的BufferedReader,java,android,sockets,chat,bufferedreader,Java,Android,Sockets,Chat,Bufferedreader,该应用程序是一个基本的聊天客户端。 我有一个从服务器获取数据的线程 我想分别从服务器获取每个响应。 只有当我使用应用程序的其他部分发送exit时循环中断时,它才会在控制台中打印。 因此,当System.out.println响应时,它会立即打印整个缓冲区 我如何使它工作并分别打印每个响应 谢谢大家! 编辑 服务器响应应在每行后面包含\n 这对我来说很有用 没有\n,它只是等待循环中断 有没有更好的方法来避免此问题 class ServerThread implements Runnabl
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();
}
}
}
您正在使用一个BufferedReader并使用in.readLine读取它,这将返回响应中的下一行。行是以换行符结尾的字符串,因此BufferedReader必须等到看到换行符后才能返回行。如果您不想在响应中使用换行符,请不要使用readLine,而是使用其他读取方法。在服务器代码中使用close-in-finally Block,您可能不会在每个响应的末尾添加一个行分隔符,所有响应加起来都是一行。@Titus服务器会在每个消息之后响应,当我用python服务器检查它时,它工作正常。谢谢,我不知道我以前怎么没有想到换行符。