2015-04-01 82 views
0

我想实现我自己的NTP客户端。我可以向NTP服务器发送请求,并收到回复。响应中的所有内容看起来都是正确的,除了四个错误的时间戳之外。我在wireshark中查看了NTP服务器发送的消息,并且一切正确。例如,这是数据Wireshark是从基准时间戳自定义NTP客户端得到错误的时间戳

D8 C6 36 C3 AE 40 00 00

显示这是我的程序得到的Refernece时间戳

D8 C6 3F 1D B0 00 00 00

我从NTP服务器接收数据的代码如下所示:

addr_len = sizeof(their_addr); 
uint8_t buffer[64]; 
memset(&buffer, 0, sizeof(buffer)); 
recvfrom(sockfd, (char*)buffer, sizeof(buffer), 0, (sockaddr*)&their_addr, &addr_len); 

有人可以帮助我找出其中的事情出错了?

+0

您是否确认收到了整个时间戳?将'buffer'初始化为'{0}'使未初始化的元素更清晰。 – molbdnilo 2015-04-01 10:19:20

+0

@molbdnilo我很确定,因为我得到了所有四个时间戳的正确开始。或者,也许我只是得到每个时间戳的90%,但这似乎不太可能 – 2015-04-01 10:22:25

回答

0

我想通了什么是错的。我忘了将从网络字节顺序收到的时间戳转换为主机字节顺序。