Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法通过Jmdns发现服务:Android_Android_Jmdns_Network Service - Fatal编程技术网

无法通过Jmdns发现服务:Android

无法通过Jmdns发现服务:Android,android,jmdns,network-service,Android,Jmdns,Network Service,我必须提供API-14及以上版本的支持,因此我无法使用Android提供的网络发现服务 所以,我已经为此尝试了Jmdns库 关于Jmdns实现,我有两个问题。 问题1 我已经实现了以下代码,但我无法发现任何服务。当我在同一网络上出于相同目的使用NSD时,我就能够发现相应的服务。所以我不确定我的代码有什么问题。有人能帮忙吗 public void onDiscoveryRequested(View v) { Thread thread = new Thread(new Runna

我必须提供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发现网络上所有正在运行的服务

有人能帮我回答以上两个问题吗

感谢和问候, Sunny

尝试将“\u http.\u tcp.local.”作为您的服务类型。在将jmdns与AirPlay一起使用时,我看到了类似的问题。

是否调用了serviceAdded()方法?