Многократная печать с сервера на клиент - PullRequest
1 голос
/ 01 сентября 2011

У меня сейчас проблема с взаимодействием сервер-клиент.

Мне нужно прочитать несколько println, которые сервер отправляет клиенту, это работает, но после того, как он прочитал строки, он неПохоже, вы вернулись к ожиданию, когда пользователь клиента введет новую команду

Это метод, который открывает потоки

private void openStreams() throws IOException
{
    final boolean AUTO_FLUSH = true;
    is = socket.getInputStream();
    os = socket.getOutputStream();
    fromServer = new BufferedReader(new InputStreamReader(is));
    toServer = new PrintWriter(os, AUTO_FLUSH);
}

Это метод, который затем отправляет запросчитает их

private void sendRequest() throws IOException
{
        String request;
        String reply;
        Scanner sc = new Scanner(System.in);

        request = sc.nextLine();
        while(!(request.equals(CLIENT_QUITTING)))
        {
            toServer.println(request);

            while((reply = fromServer.readLine()) != null)
            {
                System.out.println(reply);
            }

            request = sc.nextLine();
        }  
    }

Кажется, что он застревает во внутреннем цикле while

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

1 Ответ

1 голос
/ 01 сентября 2011

Получающему коду необходимо каким-то образом знать, когда прекратить чтение текста, а когда ожидать следующую команду.

Например, SMTP-протокол определяет, что тело письма состоит из нескольких строк, а строка .\r\n обозначает конец.

Другая возможность - это то, что HTTP делает для кускового кодирования (с байтами, но концепция та же). Он отправляет тело в виде последовательности кусков. Каждый блок состоит из поля length и данных (длина которых байтов). В вашем случае вы, вероятно, отправите количество строк, которое может ожидать получатель, а затем сами строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...