с сервера ничего не возвращается! - PullRequest
1 голос
/ 18 января 2010

У меня есть 2 важных класса (клиент и сервер), и я напишу что-нибудь в своей текстовой области, и, нажав кнопку «Отправить», я вызову активный метод класса клиента и отправлю этот текст в мой класс клиента все в порядке, и этот текст также будет напечатан на консоли сервера, но я не могу передать этот текст с сервера на клиент, пожалуйста, помогите мне спасибо.

класс клиента :( часть этого)

 os = new PrintWriter(c.getOutputStream(), true);


 is = new BufferedReader(new InputStreamReader(c.getInputStream()));

 public static void active() {

 String teXt = MainClient.getText();

 os.println(teXt);

 String line = is.readLine();
        System.out.println("Text received: " + line);
        os.flush();
        is.close();
        is.close();
        c.close();

класс сервера :( часть этого)

      BufferedReader streamIn = new BufferedReader(new InputStreamReader(client.getInputStream()));
        PrintWriter streamOut =new PrintWriter(client.getOutputStream());
        boolean done = false;
        String line =null;
        while (!done ) {

            line = streamIn.readLine();
            if (line.equalsIgnoreCase("bye")) {
                done = true;
            } else {
                System.out.println(line);
                streamOut.println(line);
            }
        }

        streamIn.close();
        client.close();
        server.close();

Ответы [ 4 ]

1 голос
/ 18 января 2010

На самом деле Nettogrof идет по правильному пути, но вы также должны очистить серверную сторону:

        line = streamIn.readLine();
        if (line.equalsIgnoreCase("bye")) {
            done = true;
        } else {
            System.out.println(line);
            streamOut.println(line);
            streamOut.flush();    // or ...checkError();
        }

или просто создайте PrintWriter с autoFlush, установленным в true:

    PrintWriter streamOut = new PrintWriter(client.getOutputStream(), true);

Одно примечание: вы также должны проверить, возвращает ли readLine () значение null, так как клиент закроет соединение, не отправляя "пока".

Второе замечание: экземпляры PrintWriter никогда не генерируют IOExceptions, вы должны проверить на ошибки, вызывая checkError(), что также сбрасывает поток.

1 голос
/ 18 января 2010

Вам необходимо "os.flush ();" перед чтением ответа сервера.

Поскольку согласно вашему клиентскому коду вы готовите текст для отправки с

 String teXt = MainClient.getText();

 os.println(teXt);

Затем вы ждете ответа сервера:

String line = is.readLine();
System.out.println("Text received: " + line);

Затем вы отправляете свой текст на сервер:

os.flush();

попробуй:

String teXt = MainClient.getText();

os.println(teXt);
os.flush();
String line = is.readLine();
System.out.println("Text received: " + line);
0 голосов
/ 18 января 2010

Реализация вашего серверного кода неверна, streamIn, client и streamOut никогда не закрываются из-за бесконечного цикла.

Обратитесь к статье, упомянутой medopal, за дополнительной помощью.

0 голосов
/ 18 января 2010

Как часто читается входной поток? Исходя из кода, похоже, что происходит одно чтение, вероятно, до того, как что-либо было отправлено с сервера, и все. Возможно, вам придется проводить более последовательный опрос сервера, если вы собираетесь использовать выбранный вами подход.

Что-то вроде:

while (line = is.readLine() != null ) {
    System.out.println("Text received: " + line);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...