Хорошее соединение - PullRequest
       2

Хорошее соединение

2 голосов
/ 14 сентября 2011

Я знаю, что есть хороший вариант использования объекта Scanner, когда вам нужно получить данные с сервера во время соединения. Но у меня есть вопрос по поводу следующего фрагмента кода:

public void sendMessage(String message) {
    try {
        OutputStream os = socket.getOutputStream();

        try {
            byte[] buffer;
            buffer = message.getBytes();
            os.write(buffer);
        } finally {
            os.close();
        }

        InputStream is = socket.getInputStream();

        try {
            StringBuffer data = new StringBuffer();
            Scanner in = new Scanner(is);
            while (in.hasNext()) {
                data.append(in.next());
            }
            System.out.println(data.toString());
        } finally {
            is.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Меня смущает фрагмент, где Scanner получает данные от InputStream, потому что он запускается сразу после отправки сообщения на сервер. Справедливо ли предположить, что данные с Сервера не будут в InputStream сразу после отправки ему сообщения?

Пожалуйста, дайте мне совет, как лучше всего сделать чтение данных из InputStream в таком случае и что я должен принять во внимание?

Ответы [ 2 ]

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

Метод InputStream.read(), вызываемый Scanner, блокируется, пока не будут доступны некоторые данные. Так что вам не нужно беспокоиться о времени отклика сервера.

См .: http://download.oracle.com/javase/6/docs/api/java/net/Socket.html#getInputStream()

0 голосов
/ 25 июня 2012

Код недействителен. Все, что он делает - это читает столько входных данных, сколько можно прочитать без блокировки. Не подразумевается, что прочитанное является полным сообщением или соответствует одному вызову write () у отправителя и т. Д. Если вам нужны сообщения в TCP / IP, вы должны реализовать их самостоятельно, с префиксом длинного слова, a протокол с самоописанием, такой как объектная сериализация или XML и т. д. и т. д.

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