Pergunta

Eu estou escrevendo um aplicativo que requer tempo exato.Depois de pedir esta pergunta, Eu decidi investigar usando NTP ou talvez Simples NTP.

Há alguma fonte aberta implementação desses protocolos para o iPhone?Até agora eu consegui encontrar um link quebrado.Também estou ciente de que NTP tem um C implementação de referência, então eu estou tentando ver o quanto de esforço seria necessário para fazê-lo funcionar no iPhone.

Atualização:Eu pensei que eu tinha um link de trabalho, mas é para o Wayback Machine, que só poupa de texto, não de arquivos o link que funciona.

Foi útil?

Solução

Há uma pequena biblioteca iOS chamada iOS-ntp. Eu o usei em um projeto no passado e parecia funcionar razoavelmente bem.

Em meados de 2013 O projeto original do iOS-NTP tem algumas peças ausentes, então espelhei o repositório SVN original no Github. Você pode verifique uma versão funcional do código aqui: https://github.com/jededc/ios-nntp

Outras dicas

Eu provavelmente começaria puxando código de Openntpd.

Se você não estiver desenvolvendo um aplicativo comercial, espie na fonte Linux.

http://packages.ubuntu.com/source/lucid/ntp

Se você precisar usar o NTP, mas não quiser confiar no relógio do iPhone (ou do iPod), você sempre pode usar soquetes (ou fluxos de cacau) e consultar o servidor. É uma das transações de rede mais simples do mercado.

Fluxos de cacau

Eu não sei de qual aplicativo você está criando, mas se confiante o relógio é um recurso crítico para a sua segurança, ou (no caso do jogo) enganar prevenção, etc., então você precisa ser muito cuidadoso de protocolos abertos como o NTP-- um cheater poderia fazer um man-in-the-middle sobre o seu pedido NTP e informe o seu aplicativo o que ele queria ouvir.

Se esta é, potencialmente, uma preocupação, você vai querer criar o seu próprio confiável fonte de verdade para o tempo em seu servidor (ex:construir o seu próprio horário de serviço, e assinar as suas respostas com a PK de criptografia) e definir o seu aplicativo do relógio interno para que, dentro de alguns aceitável inclinação do relógio.

Como você está desenvolvendo um aplicativo comercial, se tudo mais falhar, RFC 2030 descreve o protocolo SNTP. Não tenho informações sobre bibliotecas disponíveis comercialmente que não exigem uma tarefa em segundo plano, que o iPhone não permite que você use.

Você pode usar esse código aberto: https://github.com/huynguyencong/nhnhnetworktime

[[NHNetworkClock sharedNetworkClock] syncWithComplete:^{
        NSLog(@"%s - Time synced %@", __PRETTY_FUNCTION__, [NSDate networkDate]);
    }];

E use:

NSDate *networkDate = [NSDate networkDate];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top