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

È stato utile?

Soluzione

prova "_http._tcp.local."come tipo di servizio.Ho visto un problema simile quando usi JMDNS con AirPlay.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top