Текст перемещается вправо при выводе на консоль PrintWriter - PullRequest
0 голосов
/ 09 января 2019

Я пишу действительно простое серверное приложение, поэтому, когда к нему подключается клиент, он каждую секунду выводит инкрементное число из цикла 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();

Хотя программа работает нормально, она выводит вывод на консоль странным образом:

enter image description here

Для подключения к серверу я использую telnet в консоли Windows: telnet localhost 9428

Я не могу понять, почему это работает таким образом, я должен быть выровнен по одному столбцу, как это было сделано System.out.println(i).

Кто-нибудь имеет такую ​​же проблему и знает, как ее исправить?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

В Windows символ новой строки состоит из символов CR (возврат каретки) + LF (перевод строки).

В настройках клиент-сервер вы должны использовать "\r\n" или "\n" в зависимости от клиентской платформы (Windows или * nix).

Другие решения, такие как println() и System.lineSeparator(), будут работать по-разному в зависимости от платформы, на которой работает сервер (не клиент).

0 голосов
/ 09 января 2019

Вы находитесь в Windows, поэтому вы должны использовать конец строки Windows \r\n. Вы можете получить его из System.lineSeparator() вместо жесткого кодирования.

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

или используйте PrintWriter.println(int), который выведет разделитель строк после значения:

clientWriter.println(i);
...