我使用
注册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);
我的callback function被称为两次,具有相同的serviceName
,regType
和replyDomain
,只有interfaceIndex
不同,第一次是20
,第二次是10000010
。 if_indextoname()
为两者返回ethernet_12
。
与此同时,Bonjour Browser(我在互联网上找到的工具)显示我的服务仅列出一次。
我是否使用错误的参数调用DNSServiceBrowse?
答案 0 :(得分:1)
我在案件中发现了问题。
安装VMware后问题就出现了。它创建了一些虚拟网络接口。禁用这些接口后,浏览器只显示一个结果。
但我认为问题与浏览无关。我认为问题是将标志 kDNSServiceInterfaceIndexAny(0 - 3rd parameter)发送给函数 DNSServiceBrowse 可能需要将接口设置为固定值而不是0。 / p>
答案 1 :(得分:0)
我发现有一个名为dns-sd的命令行工具随Bonjour一起提供,你可以用它注册/浏览服务。
我使用
注册了一项服务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附带的标准工具列出了两次服务,我想这是正常行为。