Java Sockets - получение пустого буфера - PullRequest
0 голосов
/ 13 сентября 2018

Я получаю странные результаты чтения InputStream из Socket. Когда я отправляю данные из моей программы, я получаю действительный результат ОДИН РАЗ. Когда я делаю это из отдельной программы, я получаю действительные данные, но сервер продолжает читать то же самое сообщение, даже если я ничего не отправляю, просто подключитесь к сокету, и я получу пустой массив.

in = socket.getInputStream();
out = socket.getOutputStream();
dIn = new DataInputStream(in);

while(this.isAlive()) {
        try {
            dIn.read(buffer);

            StringBuilder builder = new StringBuilder();

            for(int i = 0; i < buffer.length; i++) {
                builder.append(buffer[i]).append(" ");
            }

            builder.append("\n");

            System.out.println(builder.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Выход (просто подключение к розетке):

0 0 0 0 0 0 0 0 

1 Ответ

0 голосов
/ 13 сентября 2018

Цитирование javadoc для read () :

Возвращает:

общее количество байтов, считанных в буфер, или -1, если естьбольше нет данных, потому что достигнут конец потока.

Ваш код просто , а не для проверки этого результата.Вы предполагаете , что все байты были прочитаны, и это просто не работает (иногда).

Другими словами: всегда всегда всегда, когда вы вызываете какой-то метод read(), который возвращает такойзначение, ваш код абсолютно должен проверить результат, чтобы убедиться, что (ожидаемые) данные действительно были получены при чтении.

Скорее всего, это является частью вашей проблемы.Но чтобы быть действительно уверенным, вам нужно дополнить свой вопрос дополнительной информацией.

...