我必须提供对 API-14 及更高版本的支持,因此我无法使用 Android 提供的网络发现服务。
因此,我为此尝试了 Jmdns 库。
我有两个关于 Jmdns 实施的问题。 问题#1
我已经实现了以下代码,但我无法发现任何服务。当我出于相同目的并在同一网络上使用 NSD 时,我能够发现相应的服务。所以我不确定我的代码有什么问题。有人可以帮忙吗?
public void onDiscoveryRequested(View v) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
setUp();
}});
thread.start();
}
private String type = "_http._tcp.";
private JmDNS jmdns = null;
private ServiceInfo serviceInfo;
android.net.wifi.WifiManager.MulticastLock lock;
android.os.Handler handler = new android.os.Handler();
private void setUp() {
android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) getSystemService(android.content.Context.WIFI_SERVICE);
WifiInfo wifiinfo = wifi.getConnectionInfo();
int intaddr = wifiinfo.getIpAddress();
byte[] byteaddr = new byte[] { (byte) (intaddr & 0xff), (byte) (intaddr >> 8 & 0xff),
(byte) (intaddr >> 16 & 0xff), (byte) (intaddr >> 24 & 0xff) };
InetAddress addr = null;
try {
addr = InetAddress.getByAddress(byteaddr);
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
lock = wifi.createMulticastLock("mylockthereturn");
lock.setReferenceCounted(true);
lock.acquire();
try {
jmdns = JmDNS.create(addr);
jmdns.addServiceListener(type, new ServiceListener() {
@Override
public void serviceResolved(ServiceEvent ev) {
Log.e("tag", "Service resolved: " + ev.getInfo().getQualifiedName() + " port:" + ev.getInfo().getPort()
+ " ip:" + ev.getInfo().getInetAddresses().toString());
}
@Override
public void serviceRemoved(ServiceEvent ev) {
Log.e("tag", "Service removed: " + ev.getName());
}
@Override
public void serviceAdded(ServiceEvent ev) {
// Required to force serviceResolved to be called again (after the first search)
jmdns.requestServiceInfo(ev.getType(), ev.getName(), 1);
Log.e("tag", "Service added: " + ev.getInfo().getQualifiedName() + " port:" + ev.getInfo().getPort()
+ " ip:" + ev.getInfo().getInetAddresses());
}
});
} catch (IOException e) {
e.printStackTrace();
return;
}
}
问题# 2 有没有办法通过 Jmdns 发现网络上所有正在运行的服务?
有人可以帮我解决以上两个问题吗?
谢谢和问候,阳光