Вы должны опубликовать код, используемый для чтения из сокета, но для меня наиболее вероятным случаем является то, что код чтения неправильно интерпретирует 0 байт как конец потока, подобный этому коду
InputStream is = ...;
int val = is.read();
while (0 != (val = is.read()) {
// do something
}
Но индикатор конца потока на самом деле -1
InputStream is = ...;
int val = is.read();
while (-1 != (val = is.read()) {
// do something
}
РЕДАКТИРОВАТЬ: в ответ на ваш комментарий по использованию isavailable()
. Я предполагаю, что вы имеете в виду available()
, поскольку в isavailable()
InputStream нет метода. Если вы используете доступные для обнаружения конца потока, это тоже неправильно. Эта функция только сообщает вам, сколько байтов можно прочитать без блокировки (т. Е. Сколько в данный момент находится в буфере), а не сколько байтов осталось в потоке.