PrintWriter只发送带println的字符串而不打印

时间:2014-02-26 05:32:47

标签: java sockets serversocket printwriter

我正在构建一个客户端/服务器应用程序,我正在尝试使用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发送消息,以便将其刷新/发送到客户端,但是它不会发送换行符?

1 个答案:

答案 0 :(得分:1)

在你的情况下,似乎你正在使用BufferedReader#readLine(),它将读取字符,直到到达换行符或流的结尾,同时阻塞。因此,您需要服务器来编写新行字符。

另一种方法是直接读取字节而不是依赖BufferedReader#readLine()

  

为什么不使用回车工作?

换行符与系统有关。在Windows上,它是\r\n。在linux上它是\n。你可以用

来搞定
System.getProperty("line.separator")

但你需要获得服务器。