我正在构建一个客户端/服务器应用程序,我正在尝试使用PrintWriter从服务器线程向客户端发送一个String。我像这样构建我的PrintWriter:
// Instantiate a PrintWriterwith a correctly implemented
// client socket parameter, and autoflush set to true
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
进一步假设客户端正在使用BufferedReader读取输入流,并将其实例化:
BufferedReader in = new BufferedReader(new InputStreamReader(client.server.getInputStream()));
,客户端从服务器获取消息:
String serverMessage = in.readLine();
如您所见,我已将autoflushing设置为true。现在,让我说,我想向客户端发送一条简单的消息。如果我执行声明:
out.println("Message to client");
然后消息成功发送。但是,如果我执行语句:
out.print("Message to client");
然后不发送消息。也:
out.print("Message to client");
out.flush();
也不起作用。
这是一个问题,因为我需要向终端中的客户端发送消息,让他们能够在同一行上做出响应。如何使用PrintWriter发送消息,以便将其刷新/发送到客户端,但是它不会发送换行符?
答案 0 :(得分:1)
在你的情况下,似乎你正在使用BufferedReader#readLine()
,它将读取字符,直到到达换行符或流的结尾,同时阻塞。因此,您需要服务器来编写新行字符。
另一种方法是直接读取字节而不是依赖BufferedReader#readLine()
。
为什么不使用回车工作?
换行符与系统有关。在Windows上,它是\r\n
。在linux上它是\n
。你可以用
System.getProperty("line.separator")
但你需要获得服务器。