生活随笔
收集整理的這篇文章主要介紹了
vc++6.0 同步本机时间到Internet NTP服务器 编译通过
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
vc++6.0 同步本機時間到Internet NTP服務器 編譯通過
2009-07-24 23:50
| #include <windows.h> #include <winsock.h> #include <time.h> #pragma comment (lib,"Ws2_32") struct?? NTP_Packet{ int?? Control_Word;?? int?? root_delay;?? int?? root_dispersion;?? int?? reference_identifier;?? __int64?? reference_timestamp;?? __int64?? originate_timestamp;?? __int64?? receive_timestamp;?? int?? transmit_timestamp_seconds;?? int?? transmit_timestamp_fractions;?? }; int APIENTRY WinMain(HINSTANCE hInstance, ???????????????????? HINSTANCE hPrevInstance, ???????????????????? LPSTR???? lpCmdLine, ???????????????????? int?????? nCmdShow) { WORD wVersionRequested; WSADATA wsaData;
wVersionRequested = MAKEWORD( 1, 1 ); if (0!=WSAStartup(wVersionRequested, &wsaData)) { ?? WSACleanup(); ?? return 0; }
if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1) { ?? WSACleanup( ); ?? return 0; } SOCKET soc=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
struct sockaddr_in addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr("192.43.244.18"); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(123);
NTP_Packet NTP_Send,NTP_Recv; NTP_Send.Control_Word?? =?? htonl(0x0B000000);?? NTP_Send.root_delay?? =?? 0;?? NTP_Send.root_dispersion?? =?? 0;?? NTP_Send.reference_identifier?? =?? 0;?? NTP_Send.reference_timestamp?? =?? 0;?? NTP_Send.originate_timestamp?? =?? 0;?? NTP_Send.receive_timestamp?? =?? 0;?? NTP_Send.transmit_timestamp_seconds?? =?? 0;?? NTP_Send.transmit_timestamp_fractions?? =?? 0;
if(SOCKET_ERROR==sendto(soc,(const char*)&NTP_Send,sizeof(NTP_Send), ?? 0,(struct sockaddr*)&addrSrv,sizeof(addrSrv))) { ?? closesocket(soc); ?? return 0; } int sockaddr_Size =sizeof(addrSrv); if(SOCKET_ERROR==recvfrom(soc,(char*)&NTP_Recv,sizeof(NTP_Recv), ?? 0,(struct sockaddr*)&addrSrv,&sockaddr_Size)) { ?? closesocket(soc); ?? return 0; } closesocket(soc); WSACleanup();
SYSTEMTIME newtime; struct tm *lpLocalTime; float Splitseconds; time_t ntp_time=ntohl(NTP_Recv.transmit_timestamp_seconds)-2208988800; lpLocalTime=localtime(&ntp_time); if(lpLocalTime==NULL) { ?? return 0; }
newtime.wYear????? =lpLocalTime->tm_year+1900;?? newtime.wMonth???? =lpLocalTime->tm_mon+1; newtime.wDayOfWeek =lpLocalTime->tm_wday; newtime.wDay?????? =lpLocalTime->tm_mday;?? newtime.wHour????? =lpLocalTime->tm_hour;?? newtime.wMinute??? =lpLocalTime->tm_min;?? newtime.wSecond??? =lpLocalTime->tm_sec;
Splitseconds=(float)ntohl(NTP_Recv.transmit_timestamp_fractions);?? Splitseconds=(float)0.000000000200 * Splitseconds;?? Splitseconds=(float)1000.0 * Splitseconds;?? newtime.wMilliseconds?? =?? (unsigned?? short)Splitseconds;?? SetLocalTime(&newtime); return 0; } |
| ? |
?
原文網址: http://hi.baidu.com/paty/blog/item/b7b58db708ba79fd31add13e.html
從授時服務器上獲得時間(非常詳盡)http://blog.csdn.net/shjte/archive/2010/04/29/5543420.aspx
NTP服務器列表: http://support.ntp.org/bin/view/Servers/NTPPoolServers
總結
以上是生活随笔為你收集整理的vc++6.0 同步本机时间到Internet NTP服务器 编译通过的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。