如何使用JmDNS解析Bonjour域名

时间:2013-01-17 05:35:04

标签: java android bonjour hostname jmdns

作为我正在开发的应用程序的一部分,我需要能够解析与Bonjour hostname对应的正确IP。

例如,我收到了jack.local,需要将其解析为192.168.1.141,这是与jack关联的IP地址。

我一直在梳理JmDNS API,而且我能找到的最多的方法是,如果已知类型和名称,则允许解析服务。但是,我根本找不到任何可以解析主机名的内容。

所以我错过了什么?是否真的无法使用JmDNS解析主机名?

2 个答案:

答案 0 :(得分:0)

如果您需要使用JmDNS从IP地址中找出LAN中的远程主机名,您可以使用以下代码。如果需要从主机名映射到IP,则可以解析所有子网IP的主机名以构建缓存。如果您的本机名称解析支持本地Bonjour名称,则可以使用InetAddress.getByName(hostname).getHostAddress()。

    final JmDNSImpl jmdns = new JmDNSImpl(null, null);
    final HostInfo hostInfo = HostInfo.newHostInfo(InetAddress.getByName("192.168.1.78"), jmdns, null);
    System.out.println("MDNS hostname (Bonjour): " + hostInfo.getName());
    System.out.println("DNS hostname: " + hostInfo.getInetAddress().getHostName());
    System.out.println("IP address: " + hostInfo.getInetAddress().getHostAddress());
    jmdns.close();

答案 1 :(得分:-1)

使用jmdns,您可以收听服务。订阅使用函数

jmdns = JmDNS.create();
jmdns.addServiceListener(String type, ServiceListener listener);

jmdns找到服务后,ServiceListener会收到通知。听众有三个公共职能:

serviceResolved(ServiceEvent event)
serviceRemoved(ServiceEvent event)
serviceAdded(ServiceEvent event)

每个人都得到ServiceEvent。现在调用event.getInfo().getHostAddresses()来获取主机的所有地址数组。

如果您想解决该服务,您必须致电

jmdns.requestServiceInfo(event.getType(), event.getName(), 1);

在serviceAdded方法中。

查看:Quick Tutorial