【问题标题】:lost of device from network using Bonjour api使用 Bonjour api 从网络丢失设备
【发布时间】:2017-07-15 05:39:43
【问题描述】:

我想查找在通信过程中丢失连接的设备。 Bonjour 将设备条目保存在具有长 TTL 的本地缓存中,因此如果我发现与设备的通信丢失,我想调用 DNSServiceReconfirmRecord 来验证设备是否在网络中。

DNSSD_API DNSServiceReconfirmRecord(
DNSServiceFlags flags,
uint32_t        interfaceIndex,
const char      *fullname,
uint16_t        rrtype,
uint16_t        rrclass,
uint16_t        rdlen,
const void      *rdata
);

如何获得rdata 值?谁能指导我如何使用DNSServiceReconfirmRecord?除了上述功能上的rdata,我拥有所有必需的信息。

【问题讨论】:

标签: c++ ios macos networking mdns


【解决方案1】:

您应该考虑rrtype,然后适当地提供rdataWiki 有 DNS 记录类型列表。指针rdata 应该指向资源记录的原始数据,即要么自己创建,要么找到可以的库。

例子:

如果rrtype == kDNSServiceType_PTR (kDNSServiceType_PTR = 12),那么rdata 必须指向RFC 1035 中定义的“指针记录”。

【讨论】:

  • 谢谢。如何在上面的示例中创建我自己的 rdata?我在图书馆找不到任何东西。我正在使用只能访问 dnn-sd.h 的 Windows。
  • 您应该遵循链接到的 RFC 或其他定义,如果:rrtype != kDNSServiceType_PTR
  • 我将 rdata 设置为 NULL RDATA 格式。我可以看到函数没有成功并返回错误-65541。我用wirehshark跟踪检查。在此函数调用期间没有数据包传输。 DNSServiceReconfirmRecord(kDNSServiceFlagsForce, 0,"xyz._xxx._udp.local", kDNSServiceType_PTR, kDNSServiceClass_IN,27, bigNULL);
  • 当您提供零字节(通过传递 NULL 指针)时,为什么 rdlen = 27?
  • 你的 rrtype 是什么?为什么?
猜你喜欢
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多