我正在寻找一种解决方案来解决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
...
谢谢,
丹尼尔
答案 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();