#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 вам ничего не говорит. Он не знает. Он занят буферизацией и повторными попытками. Обычно время ожидания истекает, и если вы выполните запись после этого, вы получите исключение. Нет никакого контроля над тем, сколько времени это займет.