我正在编写一个需要准确计时的应用程序。在问了这个问题之后,我决定使用 NTP 或 Simple NTP 进行调查。
iPhone 上是否有这些协议的开源实现?到目前为止,我已经设法找到了一个断开的链接。我也知道 NTP 有一个C 参考实现,所以我想看看它需要多少努力才能在 iPhone 上运行。
更新:我以为我有一个工作链接,但它是 Wayback Machine,它只保存文本,而不是有效的文件链接。
有一个名为ios-ntp的小型 iOS 库。我过去曾在一个项目中使用过它,它似乎工作得相当好。
截至 2013 年年中,原始 ios-ntp 项目缺少一些部分,因此我将原始 svn 存储库镜像到 github。您可以在此处签出代码的工作版本:https ://github.com/jessedc/iOS-ntp
我可能会先从OpenNTPD中提取代码。
如果您不开发商业应用程序,请查看 linux 源代码。
如果您需要使用 NTP,但又不想信任 iPhone(或 iPod)的时钟,您总是可以只使用套接字(或 Cocoa 流)并自己查询服务器。这是最简单的网络交易之一。
我不知道您正在创建什么应用程序,但是如果信任时钟是其安全性或(在游戏的情况下)作弊预防等的关键特征,那么您需要非常小心像 NTP 这样的开放协议- - 作弊者可以在你的 NTP 请求上做一个中间人,告诉你的应用他想让你听到什么。
如果这可能是一个问题,您将希望在您的服务器中构建您自己的时间可信来源(例如构建您自己的时间服务,并使用 PK 加密对您的响应进行签名),并将您的应用程序的内部时钟设置为一些可接受的时钟偏差。
由于您正在开发一个商业应用程序,如果一切都失败了,RFC 2030描述了 SNTP 协议。我没有关于不需要后台任务的商业可用库的信息,iPhone 不会让你使用。
您可以使用该开源:https ://github.com/huynguyencong/NHNetworkTime
[[NHNetworkClock sharedNetworkClock] syncWithComplete:^{
NSLog(@"%s - Time synced %@", __PRETTY_FUNCTION__, [NSDate networkDate]);
}];
并使用:
NSDate *networkDate = [NSDate networkDate];