作为我正在开发的应用程序的一部分,我需要能够解析与Bonjour hostname对应的正确IP。
例如,我收到了jack.local
,需要将其解析为192.168.1.141
,这是与jack关联的IP地址。
我一直在梳理JmDNS API,而且我能找到的最多的方法是,如果已知类型和名称,则允许解析服务。但是,我根本找不到任何可以解析主机名的内容。
所以我错过了什么?是否真的无法使用JmDNS解析主机名?
答案 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方法中。