Как я могу получить правильное время с NTP-сервера в C ++? - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь получить в реальном времени с NTP inte rnet сервера. В Интернете так много кодов по этим вопросам. поэтому я очистил коды и изменил что-то и запустил коды. Но разница во времени между фактическим временем (март 2020 г.) и временем сервера ntp (De c 2008) слишком велика. Что не так? Вот мои коды.

#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
#include <time.h>

char *hostname = (char *)"time.windows.com";
int portno = 123;
const int maxlen = 1024;
__int64 i;
char msg[48] = { 010,0,0,0,0,0,0,0,0 };
char  buf[maxlen];

struct protoent *proto;
struct sockaddr_in server_addr;
int s;
time_t tmit;

proto = getprotobyname("udp");
s = socket(PF_INET, SOCK_DGRAM, proto->p_proto);
perror("socket");

memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(hostname);
server_addr.sin_port = htons(portno);

printf("sending data..\n");
i = sendto(s, msg, sizeof(msg), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));
perror("sendto");

struct sockaddr saddr;
socklen_t saddr_l = sizeof(saddr);
i = recvfrom(s, buf, 48, 0, &saddr, &saddr_l);
perror("recvfr:");

tmit = ntohl((time_t)buf[4]);
tmit -= 2208988800U;

char temp[256];
ctime_s(temp, sizeof(temp), &tmit);
std::wcout << L"time is " << temp << std::endl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...