1

このブログ記事を参考にして、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が、コールバックは呼び出されません。どうしたの?

4

2 に答える 2

1

Bonjour イベントを処理するメイン ループが必要です。あなたが提供したリンクを注意深く見てください。「コールバックの駆動」セクションにあります。

于 2013-08-26T21:27:22.493 に答える