2015-09-14 2 views
3

Je suis en train de travailler avec NSD et je me retrouve coincé au début .. trèsImpossible d'enregistrer NSD service

Je mis en place une disposition très simple, avec un seul gros bouton. Le but de ce bouton est de démarrer et d'enregistrer un service sur mon appareil afin que les autres appareils puissent s'y connecter via le LAN. Une simple pression sur ledit bouton appelle la méthode que vous avez choisi dans ma seule activité:

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

Après les DevBytes: Service découverte réseau vidéo, je mis en œuvre les méthodes appelées ci-dessus, comme si (pardonnez mon YOLO-ing pour le débogage buts):

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

} 

Mon problème est que je continue à tomber dans la méthode onUnregistrationFailed de l'auditeur avec un code de retour = 0.

Ci-dessous vous trouverez les entrées LogCat apearing quand je appuyez sur le bouton dit:

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 

Est-ce que je manque quelque chose d'évident ici?

Nous vous remercions de votre aide!

Répondre

2

Est-ce que je manque quelque chose d'évident ici?

Oui. Vous avez manqué le signe de soulignement _ avant tcp lors de la définition du type de service. Il devrait être:

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

De l'official documentation:

... le type de service spécifie le protocole et la couche de transport utilisée par l'application. La syntaxe est "_protocol._transportlayer".

+0

@Lp Nsk Vérifiez également que vous utilisez l'autorisation INTERNET pour l'application. – Onik