4

如果您在 Windows 或 Mac OS X 终端中键入...

nslookup -type=SRV _xmpp-server._tcp.gmail.com

...(例如)您将收到一堆与不同的 google 聊天服务器相关的 SRV 记录..

有没有人在这方面有任何经验,并且可能知道如何使用 iPhone SDK 服务这些信息(主机名、端口、重量、优先级)?我已经尝试过 Bonjour 课程,但还没有运气..

谢谢!

4

3 回答 3

11

我相信你需要使用 DNSServiceDiscovery 框架。我没有 iPhone SDK,但 Google 搜索表明它在 iPhone 上可用。

有关完整的 API 详细信息,请参阅 Apple 开发人员站点。

我也包含了一些(不完整的)示例代码:

#include <dns_sd.h>

int main(int argc, char *argv[])
{
   DNSServiceRef sdRef;
   DNSServiceErrorType res;

   DNSServiceQueryRecord(
     &sdRef, 0, 0,
     "_xmpp-server._tcp.gmail.com",
     kDNSServiceType_SRV,
     kDNSServiceClass_IN,
     callback,
     NULL
  );

  DNSServiceProcessResult(sdRef);
  DNSServiceRefDeallocate(sdRef);
}

您需要提供自己的回调函数,并注意rdata发送到回调的字段是有线格式的,因此您必须自己解码来自 SRV 记录字段的原始数据。

于 2008-11-03T14:34:33.313 回答
1

我认为您最好的选择是使用 CFNetwork 实现 DNS 查询工具。

尝试在此处阅读有关此内容的更多信息:http: //developer.apple.com/documentation/Networking/Conceptual/CFNetwork/Introduction/chapter_1_section_1.html#//apple_ref/doc/uid/TP30001132-CH1-DontLinkElementID_24

于 2008-11-03T11:58:00.570 回答
0

嗯,看起来我无法system()在模拟器或设备上运行。我可以NSTask在模拟器上运行,但不能在 iPhone 上运行,并且NSTask不是Foundation框架的一部分。

ISC BIND包具有 BSD 许可证。如果可行,也许代码的相关部分dig可以直接包装到项目中。

于 2008-11-03T11:45:17.867 回答