android resolve .local (mDNS)

社会主义新天地 提交于 2019-12-21 19:52:51

问题


I'm looking for a solution to resolve .local host names with Android 4.0.4 (no NSD, due to API level 15). On the device I don't have any service to discover, just the hostname. Could you please provide an example how to resolve? I integrated the jmDNS, but don't know how to use for host name resolving.

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
...

Thank you,

Daniel


回答1:


I had almost the same requirements as your question, apart from the requirement to use jmDNS, so I solved it with NSD. I realize this doesn't address your question exactly, but thought it might still be somewhat helpful for yourself and others to see how I solved it.

I setup an NSD discovery listener and an NSD resolve listener, and within the discovery listener code, added a filter for the target host name (e.g. "kcmeasurement", or in my case, "garagedoor").

There is a blog post here which explains in detail how to do that. Refer to steps 3-4, which are dealing with the Android App code required.

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

For your case, I would imagine you would have to do the equivalent process but just using the jmDNS library instead of NSD.




回答2:


You should be able to use the InetAddress class to resolve the hostname for a given IP address. For example, using the IP address provided in the original question, try the following:

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

Since this is a network operation, make sure that it is not performed on the UI thread.

EDIT

You should be able to resolve a local hostname with jmDNS as follows:

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


来源:https://stackoverflow.com/questions/27547461/android-resolve-local-mdns

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!