Russian Qt Forum
Апрель 27, 2024, 18:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработка разрыва соединения QTcpSocket (android)  (Прочитано 4503 раз)
DroidMan
Гость
« : Март 13, 2016, 05:16 »

Не удается обработать момент разрыва соединения на андроид.
Допустим при отключении пользователем wifi.
KeepAlive отключен.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #1 : Март 13, 2016, 18:45 »

полагаю будет ошибка соединения, но не сразу, а например через 10 минут
я бы не стал полагаться на средства tcp по обнаружению потери соединие - это можеь быть долго
лучше сделать свой запрос-ответ
Записан
DroidMan
Гость
« Ответ #2 : Март 17, 2016, 14:06 »

Сделал нативный плагин для проверки.
Теперь маюсь с восстановлением соединения, какая-то странность при повторном соединении:
disconnectFromHost();
connectToHost(host, port);
тупа виснит и все Грустный
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Март 18, 2016, 08:21 »

Ооо... Связь Wifi на Android тот еще геморрой. Особенно для Android 5.0...  (еще зависит от девайса)... Мы замучались с этим...
Я реализовывал "пинги/понги" для сокета для каждой из сторон (т.е. и клиент шлет серверу "пинги"  -сервер отвечает "понгами",
и сервер шлет клиенту со своей стороны "пинги" - а сервер отвечает "понгами").. Где пинги/понги - это какие-то мои служебные пакеты.

Но, скажу честно, это не особо помогало, т.к. было что-то непонятное  с TCP на Андройд девайсах. Например, после коннекта Андройда
к серверу, сервер посылает в Андройд некие пакеты данных.. так вот, Андройдный QTcpSocket никак не реагирует на входящие данные
(не стреляет readyRead())... этак секунд 25-40... а потом сразу выстреливает всю пачку накопленных пакетов..

Ковыряние с алгоритмом Нейгла ни к чему не привело... Странно еще то, что в Android 4.x вроде все нормуль, а вот в 5.0 такое поведение.

С чем это связано - я без малейшего понятия: то-ли что-то в Qt-шном биндинге и очереди сообщений (хотя, QTimer работает исправно,
события не задерживаются, значит с очередью все нормуль).

Пробовал также и отключать Sleeping режим, и держать включенным CPU и прочее через Java код - но все бестолку.

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

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

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.