2015-09-14 2 views
3

Я пытаюсь работать с НРД, и я считаю себя застрял в самом начале ..Не удалось зарегистрировать NSD службы

Я создал очень простой макет с одной большой кнопкой. Цель этой кнопки - запустить и зарегистрировать сервис на моем устройстве, чтобы другие устройства могли подключаться к нему через LAN. Одно нажатие указанной кнопки вызывает на следующий методе в моей только активности:

public void startService(View view){ 
    initSocket(); 
    initRegList(); 
    regService(); 
} 

После DevBytes: Network Service Discovery видео, я реализовал методы названные выше, как и (прости мой YOLO-кий для отладки цели):

public void initSocket(){ 

try { 
mSocket = new ServerSocket(0); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
mPort = mSocket.getLocalPort(); 
Log.e("YOLO-PORT", String.valueOf(mPort)); 
} 

public void regService(){ 

    NsdServiceInfo serviceInfo = new NsdServiceInfo(); 
    serviceInfo.setServiceName("MyCoolService"); 
    serviceInfo.setServiceType("_myapp.tcp."); 
    serviceInfo.setPort(mPort); 
    mNsdman = (NsdManager) this.getSystemService(this.NSD_SERVICE); 
    mNsdman.registerService(serviceInfo,NsdManager.PROTOCOL_DNS_SD,mReglist); 
} 

public void initRegList() { 

    mReglist = new NsdManager.RegistrationListener() { 
     @Override 
     public void onRegistrationFailed(NsdServiceInfo nsdServiceInfo, int i) { 
      Log.e("YOLO-FAIL", "REG_FAIL, errcode = " + String.valueOf(i)); 
     } 

     @Override 
     public void onUnregistrationFailed(NsdServiceInfo nsdServiceInfo, int i) { 
      Log.e("YOLO-FAIL", "UNREG_FAIL, errcode = " + String.valueOf(i)); 
     } 

     @Override 
     public void onServiceRegistered(NsdServiceInfo nsdServiceInfo) { 
      mServName = nsdServiceInfo.getServiceName(); 
      Log.e("YOLO-NAME", mServName); 
     } 

     @Override 
     public void onServiceUnregistered(NsdServiceInfo nsdServiceInfo) { 
      Log.e("YOLO-OK", "UNREG"); 
     } 
    }; 

} 

Моя проблема заключается в том, я продолжать падать в onUnregistrationFailed метод слушателя с кодом возврата = 0.

Ниже вы найдете LogCat записи apearing, когда я нажмите на указанную кнопку:

09-14 21:54:03.904 18672-18672/fr.lpnsk.lollibox E/YOLO-PORT﹕ 48321 
09-14 21:54:04.124  180-531/? E/MDnsDS﹕ service register request 22 got an error from DNSServiceRegister -65540 
09-14 21:54:04.125  538-607/? E/NsdService﹕ Failed to execute registerService com.android.server.NativeDaemonConnector$NativeDaemonArgumentException: command '76 mdnssd register 22 MyCoolService _myapp.tcp. 48321' failed with '501 76 serviceRegister request got an error from DNSServiceRegister' 
09-14 21:54:04.126  180-531/? E/MDnsDS﹕ register stop used unknown requestId 22 
09-14 21:54:04.126  538-607/? E/NsdService﹕ Failed to execute unregisterService com.android.server.NativeDaemonConnector$NativeDaemonArgumentException: command '77 mdnssd stop-register 22' failed with '501 77 Unknown requestId' 
09-14 21:54:04.127 18672-19953/fr.lpnsk.lollibox E/YOLO-FAIL﹕ REG_FAIL, errcode = 0 

Я пропустил что-то очевидное здесь?

Благодарим за помощь!

ответ

2

Я пропустил что-то очевидное здесь?

Да. При настройке типа обслуживания вы пропустили знак _ перед tcp. Оно должно быть:

serviceInfo.setServiceType("_myapp._tcp."); 

От official documentation:

... тип сервиса определяет, какой протокол и транспортный уровень использует приложение. Синтаксис «_protocol._transportlayer».

+0

@Lp Nsk Также убедитесь, что вы используете разрешение «ИНТЕРНЕТ» для приложения. – Onik

Смежные вопросы