安卓解决 .local (mDNS) 的问题

7
我希望您能帮助解决在Android 4.0.4上解析.local主机名的问题(由于API级别15,无法使用NSD)。在设备上,我没有任何服务来发现,只有主机名。您能提供一个解析主机名的示例吗?我已经集成了jmDNS,但不知道如何用它来解析主机名。
win-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
...

谢谢您,丹尼尔。

1
这是Android的一个缺陷。如果您希望在操作系统中修复它,请访问并点赞此Android Buganizer问题 - Wyck
2个回答

7
我几乎有与你的问题相同的要求,除了使用jmDNS的要求,所以我用NSD解决了它。我意识到这并没有完全回答你的问题,但是我认为对于你和其他人来说,看看我是如何解决它的可能仍然有些帮助。
我设置了一个NSD发现监听器和一个NSD解析监听器,在发现监听器代码中,添加了一个目标主机名的过滤器(例如“kcmeasurement”,或在我的情况下,“garagedoor”)。
这里有一篇博客文章详细解释了如何做到这一点。请参考步骤3-4,这些步骤涉及所需的Android应用程序代码。

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

针对您的情况,我想象您需要执行相应的过程,但是要使用jmDNS库而不是NSD。

这似乎是关于解决mDNS 服务而不是解决名称的问题 - 特别是,文章建议更改树莓派的配置,而不仅仅是识别它应该已经具备的rapsberrypi.local mDNS名称。 - Chris Stratton
我刚刚成功地从电脑连接到了树莓派,但这是在我安装了Samba并重新启动了Avahi守护程序之后才实现的。但是从Android设备上连接没有成功。 - jaromrax
Android的问题在于它没有预装mdns服务。在Linux中,.local地址由avahi处理,在iOS/macOS中由Bonjour处理。jmdns或nsd应用程序可以启用该功能。 - Fuseteam

-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();

1
谢谢您的回复!不幸的是,它无法工作,因为“kcmeasurement”是一个mDNS主机名,而我的Android版本(4.0.4)没有内置的mDNS解析器。因此,如果我调用InetAddress.getByName,我会得到一个未找到的异常。 - MartoniczD
1
此外,我已将jmDNS包含在我的Apk中,因此广告可以正常工作,但我找不到如何解析.local名称。 - MartoniczD
-1 这个回答的原始形式和修改后的形式都完全没有回答实际问题。很可能是你没有理解被问的内容 - 你所声称在第二部分解决的所谓本地“名称”既不是mDNS名称,也不是任何类型的名称,而是一个数字IP地址,根本不需要“解析”。 - Chris Stratton
我只是使用IP地址创建一个"InetAddress"对象。通过调用"getHostName"来找到主机名。 - Willis
2
这不是问题所问的。问题是如何将类似“kcmeasurement.local”的名称转换为IP地址。一旦你有了数字IP地址,你就完成了。你开始使用数字IP地址,这使得你的回答完全不适用于问题所问的问题 - 你假设先前已经知道了问题要发现的东西! - Chris Stratton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接