Pregunta

Tengo que proporcionar soporte para API-14 y superior, por lo que no puedo usar el servicio de descubrimiento de red proporcionado por Android.

Entonces, he intentado la biblioteca JMDNS para este propósito.

Tengo dos preguntas sobre la implementación de JMDNS. Pregunta # 1

He implementado el siguiente código, pero no puedo descubrir ningún servicio.Cuando uso NSD para el mismo propósito y en la misma red, entonces puedo descubrir el servicio respectivo.Así que no soy seguro, lo que está mal con mi código.¿Podría alguien ayudar?

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;
        }
    }

Pregunta # 2 ¿Hay alguna manera de descubrir todos los servicios de ejecución en una red a través de JMDNS?

¿Podría alguien por favor ayudarme con las dos preguntas anteriores?

gracias y saludos, Soleado

¿Fue útil?

Solución

Pruebe "_http._tcp.local".como su tipo de servicio.Vi un problema similar al usar JMDNS con Airplay.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top