Обнаружение удаления устройства JmDNS

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

Я пытался периодически вызывать jmDns.list(serviceName), но, похоже, он всегда возвращает кэшированные значения.

Можно ли заставить JmDNS регистрировать удаленные устройства?

Вот код, который я использовал для регистрации службы и прослушивателя службы (только соответствующие части):

Обслуживание:

JmDNS jmdns = JmDNS.create();
ServiceInfo service = ServiceInfo.create("_test._tcp.local.", "Test", 1234, 0, 0, false, "Test info");
jmdns.registerService(service);

Слушатель службы:

JmDNS jmDns = JmDNS.create();
jmDns.addServiceListener("_test._tcp.local.", new ServiceListener() {
    @Override
    public void serviceAdded(ServiceEvent event) {
        System.out.println("Service added " + event.getInfo());
    }

    @Override
    public void serviceRemoved(ServiceEvent event) {
        System.out.println("Service removed " + event.getInfo());
    }

    @Override
    public void serviceResolved(ServiceEvent event) {
        System.out.println("Service resolved" + event.getInfo());
    }
});

Метод serviceRemoved() никогда не вызывается, даже если ранее зарегистрированное устройство больше не включается. Я очень благодарен за любую помощь, которую я могу получить в решении проблемы.

Обновление: JmDNS выясняет, что устройство отсутствует в сети, но только через полчаса. Можно ли сократить этот период?

1 ответ

Решение

Метод serviceRemoved() вызывается только тогда, когда удаленное устройство отменяет свою регистрацию перед выключением. JmDNS не активно проверяет наличие устройств, а просто прослушивает широковещательные сообщения. Если удаленное устройство не было незарегистрировано, JmDNS никогда не узнает об этом, используя время ожидания (вероятно, 30 минут в вашем случае). Одна возможность проверить, есть ли еще устройство, - это активно спросить его. Есть несколько способов сделать это. Я не знаю, если JmDNS уже что-то построить, если для этого.

Другие вопросы по тегам