2016-08-17 4 views
0

Я пишу приложение upnp, используя библиотеку Cling. Чтобы получить мои услуги/сервер, я делаю что-то вроде этого.Искать только для моих услуг

public void searchForServers() { 

    /* 
     do stuff.... 
    */ 

    // Search for new devices 
    getUpnpService().getControlPoint().search(new UDADeviceTypeHeader(new UDADeviceType("MyFantasticService"))); 
} 

я ожидал, что реестр должен содержать только экземпляры «MyFantasticService», но оказывается, что много различных устройств UPNP, кажется, ответить на мой звонок ....

ли я понял что-то здесь ? Кажется довольно ясным, как это сделать в руководстве.

+0

Просто потому, что это стандарт, не ожидайте, что он будет правильно реализован на каждом устройстве. Я видел, как лошади пахают (как мы это хотели сказать) с реализацией RTSP на камерах ... Итак, если вы уверены, что ** вы делаете все так, как вам нужно, шансы на то, что устройства этого не делают. В этом случае снова проверьте результаты и устраните ложные срабатывания. В любом случае вы не должны верить в ввод такого рода. – Fildor

+0

Да, я думал в этом направлении. –

+2

Получение _lots_ разных ответов указывает на проблему на вашей стороне. Как и все UPnP, я предлагаю проверить фактический сетевой трафик с помощью wirehark или аналогичного. Убедитесь, что сообщение M-SEARCH правильно установлено на проводе. – jku

ответ

0

Добавлен собственный фильтр, позволяющий только действительным службам переходить в реестр.

0

«Ограниченный» поиск означает, что вы хотели бы, чтобы соответствующие устройства отвечали. Но любое устройство может отвечать или фактически «быть обнаруженным» в любое время, это как раз UPnP. Предполагается, что поиск с ограничением ускоряет обнаружение, в идеале (на практике не заботится производитель устройства). Если вы хотите работать только с определенной услугой, отфильтруйте в методах обратного вызова и т. Д. В RegistryListener.