java - 在 Android 上使用 jmDNS 发现网络上的所有服务

标签 java android networking service-discovery jmdns

我正在使用此项目中的 jmdns.jar https://github.com/twitwi/AndroidDnssdDemo在我的 Android 项目中。

我目前正在尝试查找网络上的所有服务。我无法使用 Android NSD,因此请避免建议将其作为解决方案。

protected Object doInBackground(Object[] params) {
            try {
                WifiManager wifi = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
                final InetAddress deviceIpAddress = InetAddress.getByName(Formatter.formatIpAddress(wifi.getConnectionInfo().getIpAddress()));
                multicastLock = wifi.createMulticastLock(getClass().getName());
                multicastLock.setReferenceCounted(true);
                multicastLock.acquire();

                jmDNS = JmDNS.create(deviceIpAddress, "Android Device Discovery");
                jmDNS.addServiceListener("_http._tcp.local.", new ServiceListener() {//_services._dns-sd._udp _http._tcp.local. _workstation._tcp.local.
                    @Override
                    public void serviceAdded(ServiceEvent serviceEvent) {
                       jmDNS.requestServiceInfo("", "", 1000);
                    }

                    @Override
                    public void serviceRemoved(ServiceEvent serviceEvent) {
                    }

                    @Override
                    public void serviceResolved(ServiceEvent serviceEvent) {
                        System.out.println(serviceEvent.getInfo().getHostAddress());
                        System.out.println(serviceEvent.getInfo().getName());
                    }
                });

            }catch(IOException e) {
                Log.e(TAG, e.getMessage(), e);
            }
}

上面的代码为我提供了网络上打印机的地址和名称。那太棒了。我想要的是一种能够捕获我的网络上广播的所有服务的类型。 Android NSD 有一个_services._dns-sd._udp,可用于服务类型并查找网络上的所有服务。这不适用于 jmDNS。我在有限的文档中找不到任何与此相关的内容。

我需要自己检查并添加所有服务类型吗?这不是一个非常干净的解决方案。

我的 AndroidManifest 中有适当的权限。

最佳答案

尝试在末尾添加点,如果没有它,我的 jmdns 应用程序就会崩溃。 还可以尝试添加 .local。由您自己指定服务类型。

关于java - 在 Android 上使用 jmDNS 发现网络上的所有服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42412147/

相关文章:

java - 如何在共享数据库中存储java应用程序指标

java - 在 JFrame setvisible(true) 上获取 NullpointerException

android - Flutter:为什么我会收到 "Vertical viewport was given unbounded height"错误?

java - 如何处理服务器之间的时间不同步

c++ - 如何创建/设计数据结构?

java - 使用 gson 库从 Java 属性文件解析 Json

java - 我的自定义 JDialog 最小化并且 JScrollPane 的滚动消失

android - Android上的高分辨率RTSP服务器?

android - 播放服务广告与 appcompat 冲突

Java静态变量值不能传递