1

こんにちは、サンプルの jmdns serviceListner を作成しました。実行すると、サービスは引き続き表示されます。しかし、この私のプログラムでは、実行時にいくつかのサービスがリストされ、その後はサービスがリストされません。そして、私はGoogle Chromeブラウザにdns-sdを持っています。そのため、Chromeでサービスを閲覧すると、その時点で私のプログラムは他のサービスをリストします.そうでなければ、私のプログラムはサービスをリストしません. ServiceListner 自体が後続のイベントを検出しない理由がわかりません。

public static void main(String[] args) throws Exception {
    String type = "_my-app._tcp.local.";
    Enumeration<NetworkInterface> ifc = NetworkInterface.getNetworkInterfaces();
    while (ifc.hasMoreElements()) {
        NetworkInterface anInterface = ifc.nextElement();
        if (anInterface.isUp()) {
            Enumeration<InetAddress> addr = anInterface.getInetAddresses();
            while (addr.hasMoreElements()) {
                InetAddress address = addr.nextElement();
                final JmDNS jmdns = JmDNS.create(address, type);
                ServiceListenerClass aClass = new ServiceListenerClass();
                jmdns.addServiceListener(type, aClass);              

            }
        }
    }


}

public static class ServiceListenerClass implements ServiceListener {
    public void serviceAdded(ServiceEvent event) {
        event.getDNS().requestServiceInfo(event.getType(), event.getName(), true);
    }

    public void serviceRemoved(ServiceEvent event) {
        System.out.println((count--) + " " + event.getInfo().getName());
    }

    public void serviceResolved(ServiceEvent event) {
            System.out.println((count++) + " :Res: " + event.getInfo().getName() + " " + event.getInfo().getPort() + " " + event.getInfo().getApplication()
                    + " " + event.getInfo().getDomain() + " " + event.getInfo().getKey());
    }
}
4

2 に答える 2

1

同様の問題が2つありました。問題は、ファイアウォールの設定に起因する可能性があります。

私の場合、javaw.exe はすべての着信呼び出しにアクセスできましたが、ファイアウォールによってブロックされたため、誰にも何も送信できませんでした。

ファイアウォールをオフにしてプログラムをテストし、問題の原因がファイアウォールではないことを確認してください。

于 2012-07-25T11:39:31.717 に答える
0

ここで同じ問題。次の引数でJavaを起動すると、解決しました:

-Djava.net.preferIPv4Stack=true
于 2014-04-27T14:06:10.727 に答える