【问题标题】:Text moves to right when outputs to console PrintWriter输出到控制台 PrintWriter 时文本向右移动
【发布时间】:2019-06-04 06:13:45
【问题描述】:

我正在编写一个非常简单的服务器应用程序,因此当客户端连接到它时,它每秒会从 for 循环中输出一个递增的数字:

int port = 9428;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Waiting for client..");
Socket client = serverSocket.accept();
System.out.println("Client accepted!");
PrintWriter clientWriter = new PrintWriter(client.getOutputStream());

for (int i = 0; i < 10; i++) {
    clientWriter.write(i + "\n");
    clientWriter.flush();
    Thread.sleep(1000);
}

clientWriter.close();
client.close();

虽然程序运行良好,但它以一种奇怪的方式对齐控制台中的输出:

要连接到服务器,我在 Windows 控制台中使用 telnet:telnet localhost 9428

我无法理解为什么它会以这种方式工作,我应该全部对齐在一列中,就像 System.out.println(i) 所做的那样。

有人遇到同样的问题并且知道如何解决吗?

【问题讨论】:

标签: java sockets printwriter


【解决方案1】:

您使用的是 Windows,因此您必须使用 Windows 行尾 \r\n。您可以从 System.lineSeparator() 获取它,而不是硬编码。

clientWriter.write(i + System.lineSeparator());

或使用PrintWriter.println(int),它将在值之后输出行分隔符:

clientWriter.println(i);

【讨论】:

  • 据我了解,使用System.lineSeparator() 更可取,因为它在 Windows 和 Unix 上都可以正常工作?编辑:只需阅读编辑后的答案,谢谢。
  • @nklymok 是的,最好使用 Java 习惯用法而不是硬编码。
【解决方案2】:

在 Windows 中,换行符由 CR(回车)+ LF(换行)字符组成。

在客户端-服务器设置中,您应该使用 "\r\n""\n",具体取决于客户端平台(Windows 或 *nix)。

println()System.lineSeparator() 等其他解决方案的工作方式会有所不同,具体取决于 服务器 运行的平台(而非客户端)。

【讨论】:

    猜你喜欢
    • 2021-04-13
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 2011-02-22
    • 2013-02-22
    • 2021-10-21
    • 1970-01-01
    • 2011-07-11
    相关资源
    最近更新 更多