Android: найти партнеров в сети Wifi - PullRequest
1 голос
/ 30 марта 2012

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

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

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

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

1 Ответ

1 голос
/ 30 марта 2012

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

Имейте в виду, что 255.255.255.255 работает только для UDP-трансляций

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

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

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

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

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

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

2.Как часто?

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

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

...