2017-04-13 58 views
0

註冊的結果不應該爲空,這是我從logcat獲得的成功註冊的回調。Android NSD:註冊爲null服務類型

registerService 46518 
onServiceRegistered name: mytest, type: null, host: null, port: 0, txtRecord:  

一切都是空的,由系統生成的端口46518,類型,txtrecord。

下面的代碼是從official guide

private String mServiceName = "mytest"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    try { 
     // Initialize a server socket on the next available port. 
     ServerSocket mServerSocket = new ServerSocket(0); 
     int mLocalPort = mServerSocket.getLocalPort(); 
     registerService(mLocalPort); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public void registerService(int port) { 
    Log.i(tag, "registerService " + port); 
    // Create the NsdServiceInfo object, and populate it. 
    NsdServiceInfo serviceInfo = new NsdServiceInfo(); 
    // The name is subject to change based on conflicts with other services advertised on the same network. 
    serviceInfo.setServiceName(mServiceName); 
    serviceInfo.setServiceType("_mytest._tcp"); 
    serviceInfo.setPort(port); 
    serviceInfo.setAttribute("info", android.os.Build.MODEL); 

    NsdManager mNsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE); 
    mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener); 
} 

NsdManager.RegistrationListener mRegistrationListener = new NsdManager.RegistrationListener() { 

    @Override 
    public void onServiceRegistered(NsdServiceInfo nsdServiceInfo) { 
     // Save the service name. Android may have changed it in order to 
     // resolve a conflict, so update the name you initially requested 
     // with the name Android actually used. 
     mServiceName = nsdServiceInfo.getServiceName(); 
     Log.i(tag, "onServiceRegistered " + nsdServiceInfo); 
    } 

    @Override 
    public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) { 
     // Registration failed! Put debugging code here to determine why. 
     Log.i(tag, "onRegistrationFailed code " + errorCode + "\n" + serviceInfo); 
    } 

    @Override 
    public void onServiceUnregistered(NsdServiceInfo arg0) { 
     // Service has been unregistered. This only happens when you call 
     // NsdManager.unregisterService() and pass in this listener. 
     Log.i(tag, "onServiceUnregistered " + arg0); 
    } 

    @Override 
    public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) { 
     // Unregistration failed. Put debugging code here to determine why. 
     Log.i(tag, "onRegistrationFailed code " + errorCode + "\n" + serviceInfo); 
    } 
}; 

回答

1

得到了我的LG G5(安卓7.0)

中檢查MDNS信息包在Wireshark的出現和他們做一樣的! 即使在onServiceRegistered()中的NsdServiceInfo說了一些不同的東西,看起來該服務是通過正確的ip和端口 宣佈的。

相關問題