Обратный вызов Bonjour DNS-SD не вызывается, где ошибка в моем коде?

Я пытаюсь научиться использовать Bonjour, используя эту статью в блоге в качестве ссылки:

http://marknelson.us/2011/10/25/dns-service-discovery-on-windows/

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

#include <iostream>
#include <assert.h>   
#include "dns/dns_sd.h"

class CDnsSd 
{
public:
    bool discoverAsync ();

private:
    static void DNSSD_API onDiscoveryFinished (DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, 
                              DNSServiceErrorType errorCode, const char *serviceName, const char *regtype,
                              const char *replyDomain, void *context);
};

bool CDnsSd::discoverAsync()
{
    DNSServiceRef client = NULL;
    const DNSServiceErrorType err = DNSServiceBrowse( &client, 0, 0, ""_services._dns-sd._udp"", "", onDiscoveryFinished, this );
    return err == kDNSServiceErr_NoError;
}

void DNSSD_API CDnsSd::onDiscoveryFinished( DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *serviceName, const char *regtype, const char *replyDomain, void *context )
{
    std::cout << __FUNCTION__;
}

void main ()
{
    CDnsSd dnsSd;
    const bool ret = dnsSd.discoverAsync();
    assert(ret);
    Sleep(10000000);
}

DNSServiceBrowse возвращает kDNSServiceErr_NoError, но обратный вызов никогда не вызывается. Что случилось?


person Violet Giraffe    schedule 09.08.2013    source источник


Ответы (2)


Вам нужен основной цикл, обрабатывающий события Bonjour. Посмотрите внимательно ссылку, которую вы дали. Он находится в разделе «Управление обратными вызовами».

person Patrick    schedule 26.08.2013

Мне пришлось вызвать метод с именем DNSServiceProcessResult, чтобы заставить его работать со своей стороны. Я надеюсь, что это помогло

person user3891515    schedule 13.06.2018