2015-04-01 59 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

我想通了什麼是錯的。我忘了將從網絡字節順序收到的時間戳轉換爲主機字節順序。