Tôi đã mã hóa một Arduino để kết nối với một máy chủ NTP sử dụng mã này đây,
http://www.instructables.com/id/Arduino-Internet-Time-Client/step2/Code/
Nhìn vào phương pháp gọi là getTimeAndDate, và sendNTPpacket.
Đó là gói được gửi. Đây là thiết lập một bộ đệm và hiển thị nhị phân (0b) và hex (0x) được thiết lập trong bộ đệm 48 ký tự. Địa chỉ là máy chủ thời gian NTP,
memset(packetBuffer, 0, NTP_PACKET_SIZE);
packetBuffer[0] = 0b11100011;
packetBuffer[1] = 0;
packetBuffer[2] = 6;
packetBuffer[3] = 0xEC;
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;
Udp.beginPacket(address, 123);
Udp.write(packetBuffer,NTP_PACKET_SIZE);
Udp.endPacket();
Đây là những gì xảy ra đối với các gói tin nhận được,
Udp.read(packetBuffer,NTP_PACKET_SIZE); // read the packet into the buffer
unsigned long highWord, lowWord, epoch;
highWord = word(packetBuffer[40], packetBuffer[41]);
lowWord = word(packetBuffer[42], packetBuffer[43]);
epoch = highWord << 16 | lowWord;
epoch = epoch - 2208988800 + timeZoneOffset;
flag=1;
setTime(epoch);
setTime là một phần của thư viện thời gian Arduino, vì vậy thời đại nên là số giây kể từ ngày 01 tháng 1 năm 1900 như đề xuất ở đây (tìm kiếm cho kỷ nguyên),
https://en.wikipedia.org/wiki/Network_Time_Protocol
Nhưng trong trường hợp bạn muốn có một phiên bản C#, tôi thấy điều này ở đây, biên soạn mã dưới câu trả lời ngoại trừ và nó hoạt động. Điều này có thể sẽ có ý nghĩa hơn với bạn, và cho thấy việc sử dụng kỷ nguyên 1/1/1900.
How to Query an NTP Server using C#?
Có thể dễ dàng thấy sự giống nhau.
Vâng Đã kiểm tra các liên kết đó. Nhưng tôi chỉ có thể nhìn thấy các tập tin nhận được từ ntp không phải là các tập tin được gửi. – Sharpless512