7

我正在寻找使用 Android 4.0.4(没有 NSD,由于 API 级别 15)解析 .local 主机名的解决方案。在我没有任何服务要发现的设备上,只有主机名。您能否提供一个如何解决的示例?我集成了 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
...

谢谢,

丹尼尔

4

2 回答 2

7

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

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

这里有一篇博客文章详细解释了如何做到这一点。参考步骤 3-4,处理所需的 Android App 代码。

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

对于您的情况,我想您将不得不执行相同的过程,但只需使用 jmDNS 库而不是 NSD。

于 2015-03-01T12:03:26.340 回答
-5

您应该能够使用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();
于 2014-12-28T00:35:34.487 回答