Название: Обработка разрыва соединения QTcpSocket (android) Отправлено: DroidMan от Март 13, 2016, 05:16 Не удается обработать момент разрыва соединения на андроид.
Допустим при отключении пользователем wifi. KeepAlive отключен. Название: Re: Обработка разрыва соединения QTcpSocket (android) Отправлено: qate от Март 13, 2016, 18:45 полагаю будет ошибка соединения, но не сразу, а например через 10 минут
я бы не стал полагаться на средства tcp по обнаружению потери соединие - это можеь быть долго лучше сделать свой запрос-ответ Название: Re: Обработка разрыва соединения QTcpSocket (android) Отправлено: DroidMan от Март 17, 2016, 14:06 Сделал нативный плагин для проверки.
Теперь маюсь с восстановлением соединения, какая-то странность при повторном соединении: disconnectFromHost(); connectToHost(host, port); тупа виснит и все :( Название: Re: Обработка разрыва соединения QTcpSocket (android) Отправлено: kuzulis от Март 18, 2016, 08:21 Ооо... Связь Wifi на Android тот еще геморрой. Особенно для Android 5.0... (еще зависит от девайса)... Мы замучались с этим...
Я реализовывал "пинги/понги" для сокета для каждой из сторон (т.е. и клиент шлет серверу "пинги" -сервер отвечает "понгами", и сервер шлет клиенту со своей стороны "пинги" - а сервер отвечает "понгами").. Где пинги/понги - это какие-то мои служебные пакеты. Но, скажу честно, это не особо помогало, т.к. было что-то непонятное с TCP на Андройд девайсах. Например, после коннекта Андройда к серверу, сервер посылает в Андройд некие пакеты данных.. так вот, Андройдный QTcpSocket никак не реагирует на входящие данные (не стреляет readyRead())... этак секунд 25-40... а потом сразу выстреливает всю пачку накопленных пакетов.. Ковыряние с алгоритмом Нейгла ни к чему не привело... Странно еще то, что в Android 4.x вроде все нормуль, а вот в 5.0 такое поведение. С чем это связано - я без малейшего понятия: то-ли что-то в Qt-шном биндинге и очереди сообщений (хотя, QTimer работает исправно, события не задерживаются, значит с очередью все нормуль). Пробовал также и отключать Sleeping режим, и держать включенным CPU и прочее через Java код - но все бестолку. В гугле где-то видел упоминание, что это "касяк" самого Андройда.. но глубоко не копал. К чему это я все говорю: к тому что вот еще что может вылезти! И, может быть, у твоей проблемы тоже ноги отсюда растут! ;) |