Невозможно зарегистрировать НРД Сервис

Я пытаюсь работать с NSD, и я застрял в самом начале...

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

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

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

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, появляющиеся при нажатии указанной кнопки:

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

Я что-то упускаю здесь очевидное?

Спасибо за помощь!

1 ответ

Решение

Я что-то упускаю здесь очевидное?

Да. Вы пропустили подчеркивание _ подписать перед tcp при настройке типа услуги. Так должно быть:

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

Из официальной документации:

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

Другие вопросы по тегам