2014-02-26 65 views
1

我正在构建一个客户端/服务器应用程序,我试图使用PrintWriter从服务器线程向客户端发送一个字符串。我建我的PrintWriter这样的:PrintWriter只发送带有println的字符串而不打印

// 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

您的客户如何阅读流? –

+0

客户端正在用BufferedReader读取流。我会把这个例子放在问题中。 – DIMMSum

+2

如果你使用'BufferedReader#readLine()',那么你需要换行符。 –

回答

1

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

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

为什么不使用回车工作?

换行符是系统相关的。在Windows上它是\r\n。在Linux上它是\n。你可以用

System.getProperty("line.separator") 

但你需要获得服务器的。

+0

谢谢,这非常有启发性和乐于助人! – DIMMSum

+0

@Decave不客气。 –

相关问题