2017-05-05 60 views
0

使用NSDManager類發現服務列表我已經實現了一些帶有谷歌引用的代碼,但是當我嘗試發現服務時無法獲取主機地址。發現開始時它顯示爲空。我已經提到了this link用於發現連接在同一網絡中的設備列表,我跟在this blog上以獲得當連接到同一網絡時的所有服務。在NSD中使用網絡服務信息時顯示爲空

我的方法對於連接到同一網絡的服務/設備列表是否正確?

我嘗試下面的代碼,發現名單

​​

註冊服務與

public void registerService(int port) { 
    NsdServiceInfo serviceInfo = new NsdServiceInfo(); 
    serviceInfo.setServiceName(SERVICE_NAME); 
    serviceInfo.setServiceType(SERVICE_TYPE); 
    serviceInfo.setPort(port); 

    nsdManager.registerService(serviceInfo, 
      NsdManager.PROTOCOL_DNS_SD, 
      registrationListener); 
} 

我的決心聽衆

public void initializeResolveListener() { 
    mResolveListener = new NsdManager.ResolveListener() { 
     @Override 
     public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) { 
      Log.e(TAG, "Resolve failed" + errorCode); 
     } 

     @Override 
     public void onServiceResolved(NsdServiceInfo serviceInfo) { 
      Log.v(TAG, "Resolve Succeeded. " + serviceInfo); 
      if (serviceInfo.getServiceName().equals(mService)) { 
       Log.d(TAG, "Same IP."); 
       return; 
      } 
      mService = serviceInfo; 

      int port = mService.getPort(); 
      InetAddress host = mService.getHost();   } 
    }; 
} 

當我嘗試執行代碼它顯示空shows null

回答

1

當你發現一個服務,它只是一個PTR記錄:

_http._tcp.local. type PTR, class IN, myService._http._tcp.local. 

如果你想在主機/端口的信息,你必須解決這個紀錄甚至它自己標榜。

+0

我可以得到該特定設備的端口號和ip地址,但我沒有找到其他設備... – Rognik