我的目标是找到 WIFI 网络中的所有 bonjour 服务,找到它们的 ip/port,并通过 HTTP 进行通信。
错误地发现托管在 iMac 上的 Bonjour 服务 - 发现服务名称,但端口 = 0,InetAddress[] = null。与 Windows PC 上托管的相同服务的连接工作正常(来自一个供应商的相同版本的软件) - 名称、url 和端口正确发现。Bonjour 服务浏览器可以正确查看这两个服务。
使用JmDNS 3.4.0 lib,见代码示例(部分代码省略):
MulticastLock lock = wifi.createMulticastLock(MULTICAST_LOCK_TAG);
lock.setReferenceCounted(true);
lock.acquire();
final InetAddress inetAddress = getLocalIpAddress();
jmdns = JmDNS.create(inetAddress, JMDNS_NAME);
ServiceInfo[] infos = jmdns.list(CAMERA_SERVERS);
if (infos != null && infos.length > 0) {
for (int i = 0; i < infos.length; i++) {
name = infos[i].getName();
InetAddress[] addresses = infos[i].getInetAddresses();
url = addresses[0].getHostAddress();
port = infos[i].getPort();
}
PS。尝试过 Apple 的dns_sd.jar,但它依赖于本机代码,无法在 Android 中使用。
有任何想法吗?
谢谢。