2014-12-07 5 views
0

У меня есть приложение TCP-сервера в Java. Когда клиент подключается, он пытается прочитать пакет из соединения. Тем не менее, он читает, даже если клиент ничего не отправил. Я получаю aray байтов, инициализированных 0. Я ожидал, что сокет будет ждать и, в конечном счете, время ожидания, пока не появятся некоторые данные. Однако вместо этого он действует как странный.
Что случилось с этим и как я могу это исправить?
Вот как я прочитал из розетки:Java-сокеты действуют странно

byte bytes[] = new byte[25]; 
socket.getInputStream().read(commandBytes); 
+0

Можем ли мы увидеть код, который читает? – Dima

+0

Конечно. Смотрите мой пост. – Pavol

ответ

-1

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

+0

Возвращаемое значение -1 означает, что одноранговое соединение закрыло соединение. – EJP

+0

Да, точно. Закрыл соединение без отправки каких-либо данных. – Dima

-1

Что я получаю Арай байтов инициализированных 0.

Что вы получаете возврат значение из метода read(), которое сообщает вам, сколько байтов было прочитано, или -1 указывает конец потока, т. е. сверстник закрыл соединение. Поскольку вы игнорируете это значение, ваш код неверен.

Я ожидал, что гнездо будет ждать и, в конечном итоге, таймаута, пока не поступят некоторые данные.

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

Однако, это действует как странное.

Нет ничего странного в этом, кроме ваших ожиданий.