在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. 移动端布局Demo展示图文

    上两张图自勉一下(来自刘墉先生的文章,最近看他的作品):然后移动端该愈来愈受到重视,未来的市场我不知道,不过我知道手机的功能越来越强大是不争的事实!移动端布局的积累也需要从现在做起! 需求一:实现下图 ...

  2. ACM——进制转换

    http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1012 进制转换 时间限制(普通/Jav ...

  3. Use AUTO Mode with FOR XML (SQL Server 2012) Multiple Table

    SELECT Cust.CustomerID, OrderHeader.CustomerID, OrderHeader.SalesOrderID, OrderHeader.Status FROM Sa ...

  4. _In_ 是什么意思

    函数参数类型前 _In_代表什么     在visual C++中属于SAL批注,是为了编译系统在分析代码时发现缺陷用的   表示是一个输入参数.可以定义一个_In_的宏,这个宏什么都不做, 就是形如 ...

  5. Jstl标签库/Filter过滤器

    JSTLJSP Standard Tag Library JSP标准标签库 是Sun公司定义的一套标准,由Apache组织基于这套标准开发的一套标准库之后又转给Sun公司被称为JSTL,成为了java ...

  6. JDBC——架构层、驱动

    JDBC(java Datebase Connector) jdbc驱动程序 四种类型: jdbc-odbc桥接驱动程序 Native-API JDBC-Net Native-Protocol (常见 ...

  7. css层叠顺序

    优先级: 1.添加!important规则的分组享有最高优先级:会将所有不带!important的规则 例如:#id{border:6px solid black!important}高于#id{bo ...

  8. Codevs 1702 素数判定 2(Fermat定理)

    1702 素数判定 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 一个数,他是素数么? 设他为P满足(P< ...

  9. IOS 学习笔记 2015-04-09 0C-SQLite 数据存储

    1 项目导入 libsqlite3.0.dylib 框架 2 在使用数据sqlite的头文件(.h)上导入 #Impourt <sqlite3.h> 3 推荐自己本地电脑下个sqlite ...

  10. CSS定位机制

    CSS中,存在3种定位机制:标准文档流(Normal flow) * 特点:从上到下,从左导游,输出文档内容 * 由块级元素和行级元素组成 浮动(Floats) * 能够实现横向多列布局 * 设置了浮 ...