Следующий код должен обнаружить, что больше нет байтов для чтения. Однако он просто зависает, пока клиентское соединение не будет закрыто.как обнаружить конец сокета InputStream?
Сервер
//...
StringBuilder builder = new StringBuilder(128);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = socket.getInputStream().read(buffer)) != -1) {
System.out.println(length);
builder.append(new String(buffer));
System.out.println(builder.toString());
}
Client
//...
OutputStream stream = clientSocket.getOutputStream();
stream.write("LIST".getBytes());
stream.flush();
API-интерфейс и предыдущий ответ на такой вопрос гласит, что -1 должно означать, что нет символов для чтения, однако это петля пишет:
СПИСОК
висит в течение 20 секунд до тех пор, пока клиент не закрывает сокет и поднимает -1 завершить петлю.
Как я могу правильно определить, что в потоке больше нет символов?
После этого соединение должно оставаться открытым.
Я мог бы отправить количество байтов заранее или специальный символ, но можно ли обнаружить, что читать нечего, даже если соединение все еще активно.
Я пробовал с 0, и он зависает независимо. – John
@vlp -1 в Java. 'InputStream.read()' не может вернуть ноль, если вы не предоставите буфер нулевой длины или нулевой счетчик. – EJP