Как вы поддерживаете TCP-соединение с сервером при изменении активности?

Я в каком-то отчаянии. Я работаю над приложением, которое должно визуализировать данные о загрязнении. Приложение подключается к датчику через Wi-Fi напрямую, датчик является хостом группы. Затем я должен подключиться к порту 5001 и получать данные каждые 2 минуты. Предполагается, что эти данные будут отправлены в активность Google Maps, где они будут визуализированы в информационном окне.

На данный момент мне удалось создать только TCP-соединение, которое немедленно закрывается, я следовал этому действительно простому TCP клиент.

Поэтому мне нужно установить TCP-соединение, которое не закрывается, а также работает, когда я занимаюсь другими делами. Мне не нужно отправлять какие-либо сообщения, только получать данные.

Я изучил это Как поддерживать связь клиента Android с сервером даже при изменении активности и отправлять данные на сервер? но не понял, как мне реализовать этот код для моего случая.

Как ты делаешь это? Цените любую помощь.


person Kspr    schedule 08.04.2017    source источник


Ответы (1)


Ваше приложение для Android является клиентом, каждый раз, когда вам нужно получить данные, вы можете запросить их с сервера.

Если Сервер работает в режиме блокировки, вы можете отправить запрос на Сервер, и Сервер отправит ответ через открытое соединение.

Вот несколько примеров подключения клиент/сервер с помощью Socket:

https://examples.javacodegeeks.com/android/core/socket-core/android-socket-example/

https://github.com/codepath/android_guides/wiki/Отправка-и-получение-данных-с-сокетами

Вы можете найти больше примеров

На данный момент мне удалось создать только TCP-соединение, которое немедленно закрывается.

Это зависит от дизайна вашего сервера, клиентское приложение отправит запрос на сервер, и если сервер отправит ответ, вы можете его получить, но если у сервера нет ответа на отправленное, ваше соединение будет закрыто

Поэтому мне нужно установить TCP-соединение, которое не закрывается, а также работает, когда я занимаюсь другими делами. Мне не нужно отправлять никаких сообщений, только получать данные

См. ссылки выше, нет необходимости создавать соединение, которое не закрывается, вы должны отправлять свой запрос и получать ответ от Сервера каждый раз, когда вам нужно

person G3ntle_Man    schedule 08.04.2017
comment
Привет! Спасибо за ответ. Так что я вообще не проектировал сервер. Раньше я создавал только TCP-клиент. Это связано с тем, что датчик будет действовать как сервер. Мне нужно только подключиться к порту и получить данные, которые датчик отправляет каждые 2 минуты. Могу ли я сделать это с помощью приведенного выше кода, который вы связали? Или вы думаете, что мой старый код вообще может работать? Тот, что в действительно простой TCP-клиентской ссылке? - person Kspr; 08.04.2017
comment
Я не должен отправлять команды на сервер, я просто буду постоянно читать из сокета. - person Kspr; 09.04.2017