作为我正在开发的应用程序的一部分,我需要能够解析与 Bonjour主机名对应的正确 IP 。
例如,给定我jack.local
需要将其解析为192.168.1.141
与 jack 关联的 IP 地址。
我一直在梳理 JmDNS API,我能找到的最多的是在类型和名称已知的情况下允许解析服务的方法。但是,我根本找不到任何可以解析主机名的东西。
所以我错过了什么吗?真的没有办法使用 JmDNS 解析主机名吗?
如果您需要使用 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();
使用 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 方法中。
看看:快速教程