В одном из моих приложений для Android я использую поддержку JmDNS для Bonjour. При запуске я создаю один экземпляр JmDNS для каждого InetAddress в NetworkInterface. Таким образом, код выглядит примерно так:Какой IPv6-адрес я должен использовать для Bonjour?
for(InetAddress addr : addresses) {
JmDNS jmdns = JmDNS.create(addr, "SomeName");
}
Это до сих пор работал хорошо, и делая это как для v4 и v6 адреса, я могу просмотреть все правильно от других клиентов (например, на IOS).
Однако, с IPv6, один сетевой адаптер может быть связан с несколькими адресами v6. Так, например, один из моих бета-тестеров отправил мне «отчет об ошибке» со следующей настройкой сети (я изменил некоторые цифры, чтобы предотвратить утечку информации - надеюсь, что это не изменит смысл):
- ip: /fe80::b4a:8eff:fe91:b1bb%mlan0
isLoopBack: false
isLinkLocal: true
isAnyLocal: false
isSiteLocal: false
- ip: /1234:d000:1234:d1:b4a:8eff:fe91:b1bb
isLoopBack: false
isLinkLocal: false
isAnyLocal: false
isSiteLocal: false
- ip: /10.0.1.5
isLoopBack: false
isLinkLocal: false
isAnyLocal: false
isSiteLocal: true
Глядя на этот вывод, кажется, что два адреса IPv6 на самом деле очень похожи, возможно, один из них является локальным, а другой - нет. Чтение article on Wikipedia, я смог получить это в IPv6, все интерфейсы на самом деле должны иметь локальный адрес ссылки.
Тем не менее, я в тупике о том, какой из двух людей действительно используется для регистрации JmDNS. Если зарегистрировать обоих, я получаю постоянный поток из бревен, которые говорят:
Got противоречивого зонд из себя входящих: [х @ 123456789 Тип: индекс TYPE_SRV 33, класс: индекс CLASS_IN 1, имя: something._tcp .местный. ttl: '3599/3600' сервер: 'SomeName.local.:5000']
Какой из них я должен использовать? И существует ли общее правило для определения адресов из группы для регистрации?
Итак, если я правильно понимаю, вы говорите, что в этом случае я должен зарегистрировать 1-й и 3-й адреса и игнорировать 2-й. Это верно? – yydl
@yydl Так как вы все равно разговариваете с устройствами на основе ссылок, то да, вам нужно будет только использовать или использовать локальные адреса IPv6. –