4

ネットワーク上のデバイスの追加と削除を検出するために 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 は、デバイスがネットワークから欠落していることを認識しますが、それは 30 分後にのみです。この期間を短くすることは可能ですか?

4

1 に答える 1

1

serviceRemoved() メソッドは、削除されたデバイスがシャットダウン前に登録解除されたときにのみ呼び出されます。JmDNS は、デバイスの存在をアクティブにチェックするのではなく、ブロードキャスト メッセージをリッスンするだけです。削除されたデバイス自体が登録解除されていない場合、JmDNS はタイムアウトが発生するまでそれを認識しません (おそらくあなたの場合は 30 分)。デバイスがまだ存在するかどうかを確認する 1 つの可能性は、積極的に尋ねることです。これを行うにはいくつかの方法があります。そのためにJmDNSがすでに何かを構築しているかどうかはわかりません。

于 2014-01-19T08:29:51.307 に答える