غير قادر على اكتشاف الخدمات عبر Jmdns:ذكري المظهر

StackOverflow https://stackoverflow.com//questions/25081519

  •  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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top