Russian Qt Forum

Qt => Работа с сетью => Тема начата: DroidMan от Март 13, 2016, 05:16



Название: Обработка разрыва соединения 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 код - но все бестолку.

В гугле где-то видел упоминание, что это "касяк" самого Андройда.. но глубоко не копал.

К чему это я все говорю: к тому что вот еще что может вылезти! И, может быть, у твоей проблемы тоже ноги отсюда
растут!  ;)