android resolve.local(mDNS)

android resolve.local(mDNS),android,network-programming,jmdns,mdns,Android,Network Programming,Jmdns,Mdns,我正在寻找一个解决方案,以解决本地主机名与安卓4.0.4(没有NSD,由于API级别15)。在这个设备上,我没有任何需要查找的服务,只有主机名。 你能举例说明如何解决这个问题吗?我集成了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

我正在寻找一个解决方案,以解决本地主机名与安卓4.0.4(没有NSD,由于API级别15)。在这个设备上,我没有任何需要查找的服务,只有主机名。 你能举例说明如何解决这个问题吗?我集成了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
...
ping.local
Ping kcmeasurement.local[10.202.0.29]具有32字节的数据:

从10.202.0.29回复:bytes=32次您应该能够使用
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();

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

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

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


对于您的情况,我认为您必须执行相同的过程,但只使用jmDNS库而不是NSD。

谢谢您的回复!不幸的是,它不起作用,因为“kcmeasurement”是一个mDNS主机名,而我的android版本(4.0.4)没有内置mDNS解析器。因此,如果我调用InetAddress.getByName,我会得到一个未发现的异常。此外,我将jmDNS包包含在我的Apk中,因此广告可以正常工作,但我找不到如何解析。本地名称。-1此答案的原始或修订形式根本没有解决实际问题。很可能您不理解所询问的内容-您在第二部分中声称要解析的所谓本地“名称”既不是mDNS名称,也不是任何类型的名称,它是一个数字IP地址,根本不需要“解析”。我只是使用IP地址创建一个“InetAddress”对象。主机名是通过调用“getHostName”找到的。问题不是这个。问题是如何将“kcmeasurement.local”这样的名称转换为IP地址。一旦你有了一个数字IP地址,你就完成了。您从一个数字IP地址开始,这使得您的回答完全不适用于所问问题的问题-您假设您对问题涉及的发现有先验知识!这似乎是关于解析mDNS服务,而不是解析名称-特别是,writeup建议更改raspberry pi的配置,而不仅仅是识别rapsberrypi.local mDNS名称,它应该已经有现成的名称。我刚刚设法从PC访问了RPi,-仅在我安装samba并重新启动avahi守护程序之后。安卓没有带来好运安卓的问题是它没有附带mdns服务。本地地址由Linux中的avahi和ios/macos中的bonjour处理。jmdns或nsd应用程序应启用该功能