android resolve .local(mDNS)

时间:2014-12-18 13:14:49

标签: android network-programming jmdns mdns

我正在寻找一种解决方案来解决Android 4.0.4的.local主机名(由于API级别15,没有NSD)。在设备上,我没有任何服务要发现,只有主机名。 你能举一个如何解决的例子吗?我集成了jmDNS,但不知道如何使用主机名解析。

赢得-CMD:

ping kcmeasurement.local

Pinging kcmeasurement.local [10.202.0.29] with 32 bytes of data:
Reply from 10.202.0.29: bytes=32 time<1ms TTL=64
...

谢谢,

丹尼尔

2 个答案:

答案 0 :(得分:6)

除了要求使用jmDNS之外,我的问题与你的问题几乎相同,所以我用NSD解决了这个问题。我意识到这并没有完全解决你的问题,但认为对你自己和其他人来说,看看我如何解决它可能仍然有些帮助。

我设置了一个NSD发现侦听器和一个NSD解析侦听器,并在发现侦听器代码中添加了一个目标主机名的过滤器(例如&#34; kcmeasurement&#34;,或者在我的情况下,&#34; garagedoor&#34;。)

这里有一篇博文,详细解释了如何做到这一点。请参阅步骤3-4,其中涉及所需的Android应用程序代码。

http://www.dodgycoder.net/2015/02/setting-up-bonjourzeroconfmdnsnsd.html

对于你的情况,我想你必须做相同的过程,但只使用jmDNS库而不是NSD。

答案 1 :(得分:-2)

您应该能够使用InetAddress类来解析给定IP地址的主机名。例如,使用原始问题中提供的IP地址,请尝试以下操作:

try
{
    String hostname = InetAddress.getByName("10.202.0.29").getHostName();
}
catch (UnknownHostException e)
{
    Log.e("MyApplication", "Attempt to resolve host name failed");
}

由于这是一个网络操作,请确保它不在UI线程上执行。

修改

您应该能够使用jmDNS解析本地主机名,如下所示:

InetAddress localHost = InetAddress.getByName("10.202.0.29");
JmDNS jmdns = JmDNS.create(localHost);
String localHostName = jmdns.getHostName();