Исключение ObjectOutputStream IOException / тайм-аут на Android

#java #android #sockets #networking #stream

#java #Android #сокеты #сеть #поток

Вопрос:

Я разрабатываю приложение для Android в режиме реального времени, и у меня проблема с обнаружением ошибок на устройстве, ObjectOutputStream которое подключено к TCP сети Socket . Я вызываю, writeObject за которым flush следует a в потоке, как обычно, однако, когда принимающий узел неожиданно умирает, мне нужно знать об этом сразу (в течение нескольких секунд). К сожалению, когда узел выходит из строя, вызов сервера на writeObject и flush не выдает IOException s, а вместо этого завершается успешно.

Я предполагаю, что при этих вызовах выполняется внутренняя буферизация, и это является причиной ее успеха? Есть ли какой-либо способ узнать, когда узел отключен с помощью writeObject или других средств после Socket успешного создания?

Стоит отметить, что TCP Socket -ы остаются открытыми по соображениям производительности, поэтому установка тайм-аута на connect для каждого writeObject не представляется возможным.

Комментарии:

1. Покажите свой код. Другим проще помочь вам.

Ответ №1:

когда принимающий узел неожиданно умирает, мне нужно знать об этом сразу (в течение нескольких секунд)

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