Android: найти партнеров в сети Wifi

Я пытаюсь выяснить, как искать другие устройства, подключенные к сети Wi-Fi, на которых размещается приложение на определенном порту.

Как я могу обнаружить присутствие этих других устройств, не зная их адреса или даже порта, на котором они размещают?

После обнаружения я смогу связаться с устройством и установить с ним соединение клиент-сервер, используя SocketChannels.

Примечание: это приложение предназначено для работы с устройствами Android до ICS. Так что нет Wi-Fi-Direct.

1 ответ

Решение

Определенно вы можете отправить тестовый пакет для широковещательной передачи (255.255.255.255) через известный порт, который прослушивают все узлы. Это старая добрая техника для легкого открытия. Другие включают SSDP или же UPnP,

Имейте в виду, что 255.255.255.255 работает только для широковещательных рассылок UDP.

[Добавить] Я предпочитаю расширять свой ответ, а не комментировать.

1. Кто должен начать трансляцию?

Вы можете выбрать свою любимую модель трансляции. Все они взаимозаменяемы.

Модель 1 - это "предложение работы" и, на мой взгляд, моя любимая. Вы открываете сокет прослушивания в своем серверном приложении и затем периодически отправляете рекламное сообщение или сообщение широковещательной рассылки, сообщающее всем, что открытая служба доступна на определенном IP/ порту (порт не обязательно должен быть статическим). Любой узел, заинтересованный в общении, просто подключается к указанной конечной точке, чтобы воспользоваться услугой.

Модель 2 - это "поиск работы", при котором сервер молчит. Когда клиент хочет подключиться, он передает сообщение общего поиска. Любой доступный сервер получает сообщение и либо отвечает (в одноадресном режиме), либо транслирует вышеупомянутое сообщение объявления.

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

2. Как часто?

Это зависит от нескольких факторов. Я не могу помочь вам выбрать окончательное количество миллисекунд, но я могу показать вам все факторы. Во-первых, как долго клиент должен ждать, чтобы сообщить пользователю, что проверка на наличие доступных сервисов "завершена"? Вы можете думать "мгновенно" или "1 секунда", но имейте в виду, что широковещательные пакеты имеют тенденцию перегружать сеть в соответствии с количеством серверов, доступных в сообществе.

Если вы выберете модель 1, начните прослушивание доступных служб как можно скорее (т. Е. При запуске приложения), а затем периодически удаляйте из списка те службы, чье сердцебиение (другое техническое имя для широковещательного пакета) не получено в течение T*2 или же T*3 сроки где T твой тайм-аут. Ручное сканирование, как правило, должно быть завершено в течение T*1.5 или же T*1.2 углубляясь в том, насколько велика T

Другие вопросы по тегам