在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. R-大数据分析挖掘(5-R基础回顾)

    (一)R函数 R是一种解析型语言,输入后可直接获取结果 函数(输入参数,参数) R的函数分为“高级”和“低级函数” • 高级函数可调用低级函数 • 高级函数称为泛型函数 • 函数名  <-­‐ ...

  2. JS调用ashx文件传递中文参数取不到值的解决方案

    引自:http://www.cnblogs.com/yinpeng186/archive/2011/09/30/2196726.html

  3. action方法不返回

    当被请求的action方法中还有资源没有释放时,请求方法是不会返回的,会一直停留在方法中,即使是最后一行,因为请求方法一旦返回,那方法中的资源,引用就没有位置住了,所以所请求的方法会一直不返回,直到方 ...

  4. CSS控制长文本内容显示(截取的地方用省略号代替)

    自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容器撑大,下面介绍的是CSS如何实现处理的方法. 现实中经常出现一些内容比较长的文本,为了使整体布局美观,需要将文本内容控制在一行 ...

  5. Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW _TASK flag.

    在Activity中使用startActivity()方法不会有任何限制,因为Activity重载了Context的startActivity()方法.但是如果是在其他地方(如Widget或Servi ...

  6. 10.10_魔兽账号,OSC代码托管演示,研究SQL别忘记了,git

    (1)juedui8456juedui456chixin0769魔兽世界账号112288 (2)EasyXls.开源中国推出 PaaS@OSC 代码演示和运行平台.git.oschina.coding ...

  7. PDF.NET+EasyUI实现只更新修改的字段

    PDF.NET 在我看来是目前最简单易用而且高效的orm框架之一,感谢作者深蓝医生 实现的功能是easyui的行内编辑,用到了爱看书不识字的datagrid仿extjs的行内编辑 都是牛人啊. 201 ...

  8. CentOS7修改网卡为eth0

    CentOS7修改网卡为eth0 1.编辑网卡信息 [root@linux-node2~]# cd /etc/sysconfig/network-scripts/  #进入网卡目录 [root@lin ...

  9. ubuntu下编译安装apache

    官网http://httpd.apache.org/download.cgi下载apache源码包后 /*解包*/ gzip -d httpd-2_x_NN.tar.gz tar -xf httpd- ...

  10. 通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(一)

    项目组用air来开发手游, 但有些在原生应用里很容易实现的功能没有办法在air中直接调用,比如说震动,服务等等.但Adobe 提供了一种方法让air间接调用本地代码(java,object-c...) ...