Impossibile scoprire servizi tramite JMDNS: Android
-
02-01-2020 - |
Domanda
Devo fornire supporto per API-14 e oltre e quindi non sono in grado di utilizzare il servizio di rilevamento della rete fornito da Android.
Allora, ho provato la libreria JMDNS per questo scopo.
Ho due domande che riguarda l'implementazione di NIGNG JMDNS. Domanda # 1
Ho implementato il seguente codice ma non sono in grado di scoprire alcun servizio.Quando utilizzo NSD per lo stesso scopo e sulla stessa rete, allora sono in grado di scoprire il rispettivo servizio.Quindi sono noyt sì che cosa c'è di sbagliato nel mio codice.Qualcuno potrebbe aiutare?
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;
}
}
.
Domanda # 2 C'è un modo per scoprire tutti i servizi di corsa su una rete tramite JMDNS?
Potrebbe qualcuno per favore aiutami con le due domande sopra le due?
Grazie e saluti, Sunny
Soluzione
prova "_http._tcp.local."come tipo di servizio.Ho visto un problema simile quando usi JMDNS con AirPlay.