Udp socket в android

  • Android OS
  • сокети

Чи не знайшов тлумачних відповідей на цю тему.

На даний момент для взаємодії з "залізякою" використовуються сокети. Я створюю сокет (DatagramSocket) на одному мені потрібному порту (можна вибирати і випадковий), все подальші операції повинні проводитися саме з цього порту. Таймаут виставлений в 1 секунду. У всі інші частини (інші потоки) я передаю саме цей створений екземпляр сокета.

Взаємодію з ними наступними образами:

  1. 1. Періодичний опитування (раз в 4 секунди) - цього вимагає пристрій інакше воно виходить з режиму "захоплення". Використовую вбудований механізм Android - Timer;
  2. 2. Коли потрібно отримати якісь дані з пристрою або передати на нього я створюю Thread, за допомогою нього відправляю запит і отримую відповідь. Після того як робота закінчена, тред зупиняється (не зациклюватися);
  3. 3. Потік який повинен крутиться постійно і сприймати тільки потрібні пакети даних, інші ігнорувати. Його запускаю і він просто повинен крутиться (В ньому то і вся проблема, до цього обходився без нього).

Проблема наступна: при введення пункту 3, додаток перестає працювати, как-будто сокет постійно зайнятий. Приклад коду (клас з вищезгаданого пункту 3):

UPD:
Розбираючись з цим питанням, прийшов до того, що мені потрібні неблокірующіх сокети.

Випробував різні приклади - не вдалося нічого з них запустити. Отримую або нічого, або 0.

Відповідно до того, що я хочу зробити з попереднього питання у мене з'явилося два варіанти:

Щоб не бути голослівним створив репозиторій на гітхабе, де виклав всі мої спроби.

Завдання стоїть таке, треба зробити одним зі способів взаємодія з пристроєм по мережі:
1. Тримати один потік в програмі і в ньому організувати чергу запитів. Постійно крутити цикл в потоці, перевіряючи чи є що послати і посилати. Після посилок буде йти блок де ми зчитуємо не настав що небудь.
2. Можна зробити один потік який буде постійно вертіти цикл і в ньому прослуховувати, чи не настав що, а в окремих потоках посилати запити.

На блокуючих сокетах не вдалося написати жодного робочого прикладу в одному потоці, тільки окремо. У результаті виходила конкуренції за сокет.
На неблокірущіх не вдалося отримати навіть примітивного запит / відповідь (я з'ясовую в чому справа)

Схожі статті