在VCKBASE、CSDN里挖了许久的坟,才找到一些有点用的资料,最后自己整理出这样的个函数,方面VC实现时间同步,多的不说,自己看源码,根据自己的需要可以适当修改源码:

  1. #include <WinSock.h>
  2. #pragma comment (lib,"Ws2_32")
  3. struct   NTP_Packet
  4. {
  5. int      Control_Word;
  6. int      root_delay;
  7. int      root_dispersion;
  8. int      reference_identifier;
  9. __int64 reference_timestamp;
  10. __int64 originate_timestamp;
  11. __int64 receive_timestamp;
  12. int      transmit_timestamp_seconds;
  13. int      transmit_timestamp_fractions;
  14. };
  1. /************************************************************************/
  2. /* 函数说明:自动与时间服务器同步更新
  3. /* 参数说明:无
  4. /* 返 回 值:成功返回TRUE,失败返回FALSE
  5. /************************************************************************/
  6. BOOL UpdateSysTime()
  7. {
  8. WORD    wVersionRequested;
  9. WSADATA wsaData;
  10. // 初始化版本
  11. wVersionRequested = MAKEWORD( 1, 1 );
  12. if (0!=WSAStartup(wVersionRequested, &wsaData))
  13. {
  14. WSACleanup();
  15. return FALSE;
  16. }
  17. if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
  18. {
  19. WSACleanup( );
  20. return FALSE;
  21. }
  22. // 这个IP是中国大陆时间同步服务器地址,可自行修改
  23. SOCKET soc=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
  24. struct sockaddr_in addrSrv;
  25. addrSrv.sin_addr.S_un.S_addr=inet_addr("210.72.145.44");
  26. addrSrv.sin_family=AF_INET;
  27. addrSrv.sin_port=htons(123);
  28. NTP_Packet NTP_Send,NTP_Recv;
  29. NTP_Send.Control_Word   =   htonl(0x0B000000);
  30. NTP_Send.root_delay     =   0;
  31. NTP_Send.root_dispersion   =   0;
  32. NTP_Send.reference_identifier   =   0;
  33. NTP_Send.reference_timestamp    =   0;
  34. NTP_Send.originate_timestamp    =   0;
  35. NTP_Send.receive_timestamp      =   0;
  36. NTP_Send.transmit_timestamp_seconds     =   0;
  37. NTP_Send.transmit_timestamp_fractions   =   0;
  38. if(SOCKET_ERROR==sendto(soc,(const char*)&NTP_Send,sizeof(NTP_Send),
  39. 0,(struct sockaddr*)&addrSrv,sizeof(addrSrv)))
  40. {
  41. closesocket(soc);
  42. return FALSE;
  43. }
  44. int sockaddr_Size =sizeof(addrSrv);
  45. if(SOCKET_ERROR==recvfrom(soc,(char*)&NTP_Recv,sizeof(NTP_Recv),
  46. 0,(struct sockaddr*)&addrSrv,&sockaddr_Size))
  47. {
  48. closesocket(soc);
  49. return FALSE;
  50. }
  51. closesocket(soc);
  52. WSACleanup();
  53. SYSTEMTIME  newtime;
  54. float       Splitseconds;
  55. struct      tm  *lpLocalTime;
  56. time_t      ntp_time;
  57. // 获取时间服务器的时间
  58. ntp_time    = ntohl(NTP_Recv.transmit_timestamp_seconds)-2208988800;
  59. lpLocalTime = localtime(&ntp_time);
  60. if(lpLocalTime == NULL)
  61. {
  62. return FALSE;
  63. }
  64. // 获取新的时间
  65. newtime.wYear      =lpLocalTime->tm_year+1900;
  66. newtime.wMonth     =lpLocalTime->tm_mon+1;
  67. newtime.wDayOfWeek =lpLocalTime->tm_wday;
  68. newtime.wDay       =lpLocalTime->tm_mday;
  69. newtime.wHour      =lpLocalTime->tm_hour;
  70. newtime.wMinute    =lpLocalTime->tm_min;
  71. newtime.wSecond    =lpLocalTime->tm_sec;
  72. // 设置时间精度
  73. Splitseconds=(float)ntohl(NTP_Recv.transmit_timestamp_fractions);
  74. Splitseconds=(float)0.000000000200 * Splitseconds;
  75. Splitseconds=(float)1000.0 * Splitseconds;
  76. newtime.wMilliseconds   =   (unsigned   short)Splitseconds;
  77. // 修改本机系统时间
  78. SetLocalTime(&newtime);
  79. return TRUE;
  80. }
 
 

http://blog.csdn.net/wangningyu/article/details/4522648

VC自动与Internet时间服务器同步更新的更多相关文章

  1. 自动与因特网时间服务器同步 NTP 服务器 pool.ntp.org, 120.24.166.46 端口 123

    自动与因特网时间服务器同步   NTP 服务器 pool.ntp.org 海康提供的NTP服务器   120.24.166.46     端口  123

  2. c# Internet时间服务器同步

    2009-02-02 17:48 8226人阅读 评论(2) 收藏 举报 服务器internetc#socketstringwindows 需要用到的名空间 using System.Net; usi ...

  3. 小凡的Linux主机与时间服务器同步记录

    小凡的Linux主机与时间服务器同步记录 导读 我们新安装的Linux主机,如果没有做与互联网服务器时间同步的处理的话,当我们使用date命令的时候,我们就看不到当前的时间,只能看到过去的时间.在我们 ...

  4. 设置linux服务器定时与时间服务器同步

    在一些大公司经常出现这样一个情况:公司或一些机关单位的内部业务系统的应用服务器以及数据都是做的多机集群部署而且基本都是linux系统,而且都是内部网,不与外网通讯的.这样经常就会出现一个情况,我发送任 ...

  5. centos下部署NTP时间服务器同步环境记录

    1)服务端部署 安装所需软件包 [root@test ~]# yum -y install ntp ntpdate 服务端自己先手工同步一次时间. [root@test ~]# ntpdate ntp ...

  6. Linux基础命令---ntpstat显示时间服务器同步

    ntpstat ntpstat指令用于显示本机上一次和服务器同步时间的情况. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.   1.语法 ntpstat   2 ...

  7. 分享淘宝时间服务器同步时间接口api和苏宁时间服务器接口api

    最近要开发一款抢购秒杀的小工具,需要同步系统时间,这里分享两个时间服务器接口api给大家: 1.淘宝时间服务器时间接口 http://api.m.taobao.com/rest/api3.do?api ...

  8. chronyd时间服务器同步时间配置

    chrony是两个用来维持计算机系统时钟准确性的程序,这两个程序命名为chronyd和chronyc. chronyd是一个在系统后台运行的守护进程.他根据网络上其他时间服务器时间来测量本机时间的偏移 ...

  9. linux下自动同步internet时间

    linux下很简单直接一句即可: ntpdate time.nist.gov ntp后面参数为internet时间服务器url或ip即可. 但是ntpdate命令需要root特权,如果做成自动运行每次 ...

随机推荐

  1. Sql 随机生成日期时间

    DECLARE @dt1 DATETIME,@dt2 DATETIME,@a BIGINT,@b BIGINT SET @dt1='2010-01-01'--开始日期 SET @dt2='2010-0 ...

  2. webrtc学习——RTCPeerConnection

    The RTCPeerConnection interface represents a WebRTC connection and handles efficient streaming of da ...

  3. Orchard helloworld

    原文链接:http://www.orchardproject.net/docs/Building-a-hello-world-module.ashx 命令行语法:http://www.cnblogs. ...

  4. Dev ComboxTree的实现

    一个项目中刚好用到,自己做下笔记备份 顺便和大家共享下 需要用到ASPxDropDownEdit ASPxTreeView 这两个控件 ASPxDropDownEdit对应的dll为:DevExpre ...

  5. NET环境下的未处理异常(unhandled exception)的解决方案

    NET环境下的未处理异常(unhandled exception )的解决方案 .Net 框架提供了非常强大的异常处理机制,同时对一些非托管代码很难控制的系统问题比如指针越界,内存泄漏等提供了很好的解 ...

  6. 查看SQL server 2008 R2 的Service Package 版本号(同样适用于SQL Server 2005)

    在SQL Server 中新建一个查询(new Query),然后输入下面的SQL脚本,即可看到当前的数据库的Service Package (补丁包)的版本号 select serverproper ...

  7. (转)Cookies使用

    实际上,在web开发中,cookie仅仅是一个文本文件,当用户访问站点时,它就被存储在用户使用的计算机上,其中,保存了一些信息,当用户日后再次访问这个站点时,web可以将这些信息提取出来. 尽管现在听 ...

  8. 什么是SysWow64

    转自 什么是SysWow64 Wow!什么是Wow64 64位的Windows并不是简单地把所有东西都编译成64位就万事大吉的.关于64位的CPU应该做成什么样子,Intel和AMD曾有各自的打算.A ...

  9. job还是job

    declare jobno binary_integer;rm_days number;rm_hour number;  --传入的hourmy_hour number;    --取出当前时间的ho ...

  10. LA 3516(ZOJ 2641) Exploring Pyramids(递推 DP)

    Exploring Pyramids Archaeologists have discovered a new set of hidden caves in one of the Egyptian p ...