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

我有一个类似的问题二。问题可能来自您的防火墙设置。

在我的情况下,javaw.exe 可以访问所有来电,但由于防火墙阻止了它,因此无法向任何人发送任何内容。

尝试打开防火墙以测试您的程序,并确保这不是导致问题的防火墙。

于 2012-07-25T11:39:31.717 回答
0

这里同样的问题。使用以下参数启动 java 为我解决了这个问题:

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