android mdns开发实例,android resolve .local (mDNS)

时间: 2023-08-18 admin IT培训

android mdns开发实例,android resolve .local (mDNS)

android mdns开发实例,android resolve .local (mDNS)

问题

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.

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

来源: