Как я могу реализовать DNS - Service Discovery в Unity3D, аналогично браузеру Bonjour

Я хочу реализовать модуль обнаружения служб для получения IP-адреса устройства вещания службы, аналогичного браузеру bonjour. Можно ли реализовать это в Unity3D (Android/iOS). Может ли кто-нибудь указать мне, как я могу этого достичь. Небольшой пример был бы очень полезен. Спасибо

Редактировать 1: устройство IOT передает службу DNS, и я хочу получить эту службу в приложении Unity, чтобы найти IP-адрес устройства IOT. У меня нет доступа к программному обеспечению устройства IOT или его исходному коду.


person TUSHAR KHAVALE    schedule 25.01.2017    source источник


Ответы (2)


Вам не нужно делать это с нуля. Существует новый API Unity под названием NetworkDiscovery, который упрощает эту задачу.

Чтобы узнать, к какому IP-адресу подключиться, вызовите NetworkDiscovery.StartAsServer() на стороне сервера один раз в функции Start().

На стороне клиента вызовите NetworkDiscovery.StartAsClient(), затем реализуйте функцию OnReceivedBroadcast(string fromAddress, string data);. Когда сервер будет найден, будет вызвана функция OnReceivedBroadcast(string fromAddress, string data);, после чего вы сможете использовать возвращенное значение fromAddress для подключения к вашему серверу.

Когда клиент подключится, вы можете остановить трансляцию, позвонив по номеру NetworkDiscovery.StopBroadcast().

Если вы делаете это только в учебных целях, вам просто нужно транслировать по протоколу UDP. Для получения дополнительной информации вы можете прочитать это и это.

person Programmer    schedule 25.01.2017
comment
Я пробовал класс NetworkDiscovery, он отлично работает. Но здесь вещательное стороннее устройство не является моим клиентом единства. Таким образом, эта служба не видна в функции OnReceivedBroadcast(). Я вижу службу, транслируемую сторонним устройством, в приложении браузера Bonjour на том же устройстве, тогда как я не вижу трансляцию UDP от клиента Unity (редактора/устройства) в приложении браузера Bonjour. - person TUSHAR KHAVALE; 26.01.2017
comment
Я также рассмотрел это во второй части моего вопроса. Если вы делаете это только в целях обучения, вам просто нужно транслировать по протоколу UDP. Для получения дополнительной информации вы можете прочитать это и это. Пожалуйста, проверьте эти две ссылки, чтобы узнать, как это сделать. Первая ссылка объясняет, как это работает. Вторая ссылка показывает, как транслировать по сети с UDP. Это то, что ты хочешь. - person Programmer; 26.01.2017
comment
Я не могу добиться этого с помощью NetworkDiscovery или UDPClient. Он показывает только ту трансляцию, которую я делаю с помощью NetworkDiscovery - Начать трансляцию и UDP-трансляцию. Где, как и в браузерном приложении Bonjour, я также вижу принтеры, подключенные к сети. Я успешно добился этого в родном Android, используя класс ServiceListener. Можете ли вы вести меня дальше. Спасибо - person TUSHAR KHAVALE; 26.01.2017
comment
Моя ситуация: ящик, который идентифицирует себя с .local, НЕ является компьютером, и поэтому я не могу его запрограммировать. (Это DSP с проприетарным приложением для управления им.) Я надеюсь подключиться к нему на основе его имени .local. - person Ubuntourist; 04.11.2017
comment
@Ubuntourist Неважно, компьютер это или нет. пока он проходит через сеть / Wi-Fi, он должен работать. Используйте Wireshark, чтобы узнать, какой протокол он использует для вещания. Обычно это UDP, но проверьте с помощью Wireshark, а затем посмотрите, что именно он отправляет. Если UDP, прочитайте вторую часть моего ответа, в которой есть ссылка на пример UDPClient. Это может быть использовано для обнаружения этого устройства. Обратите внимание, что никто не будет реплицировать для вас API-интерфейс priopetry бесплатно. Это просто отнимает много времени. Вы должны сделать это сами, следуя моим указаниям или заплатить кому-то, кто сделает это за вас. - person Programmer; 04.11.2017

Вот плагин для iOS, который выполняет обнаружение службы DNS: https://docs.unity3d.com/Manual/PluginsForIOS.html

person TUSHAR KHAVALE    schedule 05.02.2017