Я пытаюсь получить имя хоста от службы, которая рекламирует себя в моей локальной сети, используя mDNS / Zeroconf. Я использую API обнаружения сетевых служб Android, но похоже, что 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
.
На Android в моем 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?