غير قادر على اكتشاف الخدمات عبر Jmdns:ذكري المظهر
-
02-01-2020 - |
سؤال
لا بد لي من تقديم الدعم لـ 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؟
هل يمكن لأحد أن يساعدني في السؤالين أعلاه؟
شكرا وتحييد ، مشمس
المحلول
جرب "_http._tcp.local." كنوع خدمتك.لقد رأيت مشكلة مماثلة عند استخدام jmdns مع AirPlay.
لا تنتمي إلى StackOverflow