У меня есть приложение, обрабатывающее несколько соединений сокетов Java с различными типами удаленных машин (некоторые ПК, другие являются встроенными устройствами). Эти сокеты и потоки не должны закрываться бесконечно, за исключением очень веской причины (например, сбой удаленной системы).
Я часто сталкиваюсь с проблемой, когда входной поток неожиданно завершается без какой-либо причины (значение равно -1), то есть удаленный компьютер не сообщает об обрыве соединения. Но когда я отбрасываю чтение -1 и продолжаю чтение из потока, удаленный компьютер на самом деле отправляет новые данные позже. Это может продолжаться очень долго. Я также все еще могу писать в выходной поток тоже.
В текущей ситуации у меня есть выбор между обработкой -1 как концом потока и закрытием сокета (с ложными срабатываниями), или игнорированием ввода -1 и риском не быть уведомленным о реальных разъединениях.
Мне не удалось создать рабочий пример этой проблемы, и проблемы появляются случайным образом.
Есть идеи, что не так?
Отредактировано, чтобы добавить: Конечная точка Java - это перезапись существующего приложения VB, у которого не было этих проблем (по крайней мере, насколько мне известно).