Intereting Posts
Выровнять изображение в верхнем правом углу экрана Android Как растянуть строки в gridview для заполнения экрана? Репликация CouchDB на и с Android Как сгенерировать apk на сервере с изменением имени приложения и значка автоматически в Android? Как перемещать ShapeDrawable в Canvas на событиях касания Использование Locale, чтобы заставить Android использовать определенный файл strings.xml для не поддерживаемого языка EGLConfig не найден в эмуляторе, эмуляция gpu верна Android.provider.Settings.Secure.ANDROID_ID возвращает "android_id" Как я могу получить дополнительную информацию о «Ожидание подключения целевого устройства в Android» в Android Studio? Предназначение для получения нескольких изображений Остановить программный щелчок мышью в программном обеспечении Android Программно закрыть межстраничное объявление Полная очередь, потерять событие в Android Emulator Как сохранить изображение в общих предпочтениях в Android | Общая проблема с предпочтением в Android с изображением Android Studio 3.0 canary – Не удалось разрешить: org.apache.httpcomponents: httpclient: 4.0.1

Поддержание двунаправленного соединения UDP

Я пишу клиент UDP для Android, который подключается и связывается с двунаправленным (без связи между отправленными и полученными сообщениями) с сервером Windows. Как только исходная датаграмма отправлена ​​на сервер, я хочу иметь возможность отправлять данные в любом направлении в любое время. Мои вопросы:

1) Правильно ли держать исходный разъем открытым и использовать его для отправки и получения?

2) Должен ли я отправлять и получать в том же потоке (с тайм-аутом при получении) или в отдельных потоках (позволяя получать блокировать)?

3) Будет ли сокет автоматически закрываться, если данные не будут отправлены / получены в течение определенного интервала?

  1. Да, это не проблема, и это самый удобный способ справиться с двунаправленной связью. Кроме того, если клиент размещен за NAT, для правильной работы отверстия требуется перфорация отверстия . Несмотря на то, что вы привязываетесь к одному и тому же IP и порту на клиенте, вам не гарантируется получение одинакового отображения в NAT. Таким образом, сервер не сможет связаться с клиентом. Помните, что эти сопоставления тайм-аут и инициируются внутри NAT-сети, поэтому может потребоваться некоторое исследование, если клиент простаивает в течение длительного времени.

  2. Это зависит от того, как вы разрабатываете приложение, но нет никаких проблем с этим. Просто проверьте состояние чтения и записи сокета, используя, например, select. Если вы создадите неблокирующий сокет в сочетании с записью / записью-очередью, вы обязательно не заблокируете операцию. Поскольку UDP либо пишет все, либо ничего, очередь довольно проста.

  3. Основываясь на моем опыте, это зависит от конкретного поставщика на Android. Некоторые телефоны продолжают открывать сокеты долгое время, а другие закрывают их после определенного периода ожидания. Все телефоны, похоже, закрывают сокеты, когда устройство переходит в спящий режим (состояние при нажатии кнопки питания), за исключением тех, которые связаны с фоновой задачей.