Работа с Socket. Клиент не принимает сообщения от сервера

У меня есть две отдельно запускаемые программы на языке Java. Первая программа представляет себя в роли сервера, а другая — в роли клиента.

Программа сервера отправляет сообщения клиенту каждую секунду.

// SERVER
public static void main(String[] args) throws IOException, InterruptedException {
    ServerSocket serverSocket = new ServerSocket(7515);
    Socket socket = serverSocket.accept();
    System.out.println("We are connected!");
    int k = 1;
    while (true) {
        PrintStream out = new PrintStream(socket.getOutputStream());
        out.print("Hello! This is my " + k++ + " message from server.");
        out.flush();
        Thread.sleep(1000);
    }
}

Вторая программа пытается принимать сообщения от сервера.

// CLIENT
public static void main(String[] args) throws IOException {
    Socket socket = new Socket("localhost", 7515);
    while (true) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        System.out.println(reader.readLine());
    }
}

Проблема в том, что клиент по каким-то причинам не получает сообщения от сервера, хотя сервер их отправляет, вызовом метода flush.

Что не так с кодом и как это исправить?


Ответы (1 шт):

Автор решения: Nowhere Man

Код на клиенте пытается прочитать строку: reader.readLine(), но сервер НЕ отправляет строку и сокет никогда не закрывается.

Нужно добавить перевод строки \n в коде сервера:

 out.print("Hello! This is my " + k++ + " message from server.\n");

Похожий вопрос: flush() не работает, зато работает close()

→ Ссылка