Android Network Service Discovery получает имя хоста (mDNS/Zeroconf)
Я пытаюсь получить имя хоста от службы, которая рекламирует себя в моей локальной сети, используя mDNS/Zeroconf. Я использую Android API обнаружения сетевых служб, но кажется, что Android не использует объявленное имя хоста, а пытается выполнить обратный поиск DNS, а в случае неудачи возвращает только IP-адрес.
На моем Macbook я могу сделать следующее:
$ dns-sd -B _myservice._tcp
DATE: ---Mon 29 Oct 2018---
17:35:25.332 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
17:35:25.333 Add 2 10 local. _myservice._tcp. My Service Name
$ dns-sd -L "My Service Name" _myservice._tcp
DATE: ---Mon 29 Oct 2018---
17:38:35.423 ...STARTING...
17:38:35.423 My\032Service\032Name._myservice._tcp.local. can be reached at test.my.service.local.:443 (interface 10)
Затем я могу использовать возвращенное имя хоста (test.my.service.local
) найти соответствующий IP. У меня это работает правильно на iOS с помощью NSNetServiceBrowser
,
На андроиде по моему onServiceDiscovered
если я сделаю следующее:private static Map<String, Object> OnServiceDiscovered(NsdServiceInfo info) {
Log.d(TAG, info.getHost().getHostAddress());
Log.d(TAG, info.getHost().getHostName());
}
Я получаю правильный IP-адрес, но getHostName возвращает "raspberrypi.local" (из /etc/hostname) или в другой сети только IP-адрес. Я подозреваю, что на Android getHost(). GetHostName() выполняет обратный поиск DNS и игнорирует имя хоста, которое объявляется с помощью mDNS.
Есть ли способ получить имя хоста из mDNS на Android?