我在Android项目中使用此项目https://github.com/twitwi/AndroidDnssdDemo中的jmdns.jar。
我目前正在尝试查找网络上的所有服务。我无法使用Android NSD,因此请避免将其建议为解决方案。
protected Object doInBackground(Object[] params) {
try {
WifiManager wifi = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
final InetAddress deviceIpAddress = InetAddress.getByName(Formatter.formatIpAddress(wifi.getConnectionInfo().getIpAddress()));
multicastLock = wifi.createMulticastLock(getClass().getName());
multicastLock.setReferenceCounted(true);
multicastLock.acquire();
jmDNS = JmDNS.create(deviceIpAddress, "Android Device Discovery");
jmDNS.addServiceListener("_http._tcp.local.", new ServiceListener() {//_services._dns-sd._udp _http._tcp.local. _workstation._tcp.local.
@Override
public void serviceAdded(ServiceEvent serviceEvent) {
jmDNS.requestServiceInfo("", "", 1000);
}
@Override
public void serviceRemoved(ServiceEvent serviceEvent) {
}
@Override
public void serviceResolved(ServiceEvent serviceEvent) {
System.out.println(serviceEvent.getInfo().getHostAddress());
System.out.println(serviceEvent.getInfo().getName());
}
});
}catch(IOException e) {
Log.e(TAG, e.getMessage(), e);
}
}
上面的代码为我提供了网络上打印机的地址和名称。太棒了。我想要的是一个TYPE,它将捕获我网络上广播的所有服务。 Android NSD有_services._dns-sd._udp
可用于服务类型并查找网络上的所有服务。这不适用于jmDNS。我无法在有限的文档中找到有关此内容的任何内容。
我是否需要自己完成并添加所有服务类型?这不是一个非常干净的解决方案。
我的AndroidManifest中有正确的权限。
答案 0 :(得分:0)
尝试在最后添加点,没有它,我的jmdns应用程序崩溃了。 也可以尝试添加.local。自己选择服务类型。