1

我使用注册 Bonjour 服务

DNSServiceRegister(&dnssref, 0, 0, "Fortune Server on my-PC", "_trollfortune._tcp", 0, 0, bigEndianPort, 0, 0, 0, 0);

然后我浏览它使用

DNSServiceBrowse(&dnssref, 0, 0, "_trollfortune._tcp", 0, bonjourBrowseReplyCallback, this);

我的回调函数被调用了两次,相同serviceName,只有不同regType,第一次是,第二次是。两者都返回。replyDomaininterfaceIndex2010000010if_indextoname()ethernet_12

同时,Bonjour 浏览器(我在 Internet 上找到的一个工具)显示我的服务只列出了一次。

我是否使用错误的参数调用 DNSServiceBrowse?

4

2 回答 2

1

我发现了我的问题。

安装 VMware 后问题开始出现。它创建了一些虚拟网络接口。禁用这些接口后,浏览器只显示一个结果。

但我认为问题与浏览无关。我认为问题在于将标志kDNSServiceInterfaceIndexAny(0 - 3rd 参数)发送到函数DNSServiceBrowse可能您需要将接口设置为固定值而不是 0。

于 2013-12-05T13:18:41.833 回答
0

我发现 Bonjour 附带了一个名为 dns-sd 的命令行工具,您可以使用它注册/浏览服务。

我注册了一项服务

dns-sd -R "Fortune Server on my-PC" _trollfortune._tcp local 1234

并使用命令浏览它

dns-sd -B _trollfortune._tcp

给我以下输出:

Browsing for _trollfortune._tcp
Timestamp     A/R     Flags if       Domain                    Service Type              Instance Name
19:48:23.674  Add     3     20       local.                    _trollfortune._tcp.       Fortune Server on my-PC
19:48:23.674  Add     2     10000010 local.                    _trollfortune._tcp.       Fortune Server on my-PC

由于 Bonjour 附带的标准工具两次列出了该服务,我想这是正常行为。

于 2013-11-04T19:27:51.393 回答