1 | |||||||||||
Как создать постоянное сокет-соединение?06.12.2018, 16:34. Показов 1124. Ответов 2
Доброго дня.
Необходимо создать постоянное соединение телефона с сервером посредством сокета. Для этого была создана служба, в которой стартует тред, в котором в свою очередь создаётся сокет соединение и 2 потока (DataOutpuStream и DataInputStream) и в бесконечном цикле пока не поступит команда на уничтожение треда считываются и обрабатываются входящие данные и отправляются исходящие. Всё работает до какого-то момента, пока на отправку не поступит "большой" объём данных, более 2-3 Кб. Дальнейшая отправка недоступна. Метод run треда ниже. Кликните здесь для просмотра всего текста
Исходящий поток out передаётся в runTask, там стартует AsyncTask и по завершении работы отправляет данные в out. Попытки понять почему после некоторого количества данных в 90% исходящий перестаёт отправлять сообщение понять не удалось. Никаких ошибок не выпадает, огромное количество логгирующих сообщений (выше в коде удалил их) тоже ничего не проясняют. Попытки найти причину в сети не помогли, пример схожей проблемы, там не смогли победить проблему и просто перешли на UDP. Второй вопрос связанный с первым. Достаточно часто встречаются примеры реализации Socket соединения, имеющие примерно следующий вид (Полный код тут): Кликните здесь для просмотра всего текста
Собрал проект у себя на 2 телефонах, это клиент-серверное решение работает, правда там нет постоянного соединения. Но может кто-нибудь объяснить своими словами, что происходит в этом цикле? Как связаны исходящий и входящий потоки? Не понимаю, почему считывание выполняется пока что есть входящие данные, что-ли? А что тогда происходит если они разной длинны? Не очевидный код если честно, и нигде объяснения не могу найти.
0
|
06.12.2018, 16:34 | |
Ответы с готовыми решениями:
2
Как организовать постоянное соединение с БД Как только происходит попытка создать сокет для UDP - сокет TCP сразу ломается (выдает 10093). Как работает сокет соединение в PHP? Постоянное соединение с БД |
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
|
|
06.12.2018, 18:39 | 2 |
arvalon, данные передаваемые через потоковый сокет могут быть произвольным образом фрагментированы - например послали 123456 пришло 12 потом 3 потом 456 - рассматривайте их именно как поток, читать такой поток и получать из него структуры данных при их полном получении должен ваш код
0
|
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
|
|
06.12.2018, 23:27 | 3 |
Создать не проблема. Проблема удержать. Точнее определить когда оно пропало, в том числе и так называемое состояние "полуконнект" - это когда связь, например с маршрутизатором есть ( или еще какого другого устройства типа узла провайдера ), а от него далее обрыв случился.
0
|
06.12.2018, 23:27 | |
06.12.2018, 23:27 | |
Помогаю со студенческими работами здесь
3
Постоянное сокетное соединение Постоянное соединение postgres с php Постоянное соединение клиент-сервер Организовать постоянное http соединение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |