【问题标题】:DNSServiceBrowse lists the same service twice, with different interfaceIndexDNSServiceBrowse 两次列出相同的服务,具有不同的 interfaceIndex
【发布时间】:2013-11-04 17:15:47
【问题描述】:

我使用

注册了 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被称为两次,同一个serviceNameregTypereplyDomain,只是interfaceIndex不同,第一次是20,第二次是10000010if_indextoname() 为两者返回 ethernet_12

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

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

【问题讨论】:

  • 我遇到了同样的问题。这真的很奇怪,因为在“某事”之前只有一个回调它被调用。

标签: c++ bonjour


【解决方案1】:

我发现了我的问题。

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

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

【讨论】:

    【解决方案2】:

    我发现 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 附带的标准工具列出了两次服务,我想这是正常行为。

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 2015-08-13
      相关资源
      最近更新 更多