在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. (转)了解了这些才能开始发挥jQuery的威力

    原文地址:http://www.cnblogs.com/dolphinX/p/3347677.html 由于当前jQuery如此的如雷贯耳,相信不用介绍什么是jQuery了,公司代码中广泛应用了jQu ...

  2. Android开发——构建自定义组件

    Android中,你的应用程序程序与View类组件有着一种固定的联系,例如按钮(Button). 文本框(TextView), 可编辑文本框(EditText), 列表框(ListView), 复选框 ...

  3. 万网免费主机wordpress快速建站教程-万网主机申请

    很多小伙伴在万网的免费主机申请活动中建立起了自己的个人网站,但还是还有许多小伙伴现在想建站,却发现官网找不到免费主机的申请地址了,以为活动结束了?其实还是可以继续申请免费主机的,接下来小编给大家介绍如 ...

  4. 时间处理总结(一).net

    不断整理中... 获取当前时间DateTime.Now.ToString("d") ;//获取到的日期格式为eg :2013/11/14 时间格式只取年月日DateTime.Now ...

  5. 基于NodeJs的网页爬虫的构建(一)

    好久没写博客了,这段时间已经忙成狗,半年时间就这么没了,必须得做一下总结否则白忙.接下去可能会有一系列的总结,都是关于定向爬虫(干了好几个月后才知道这个名词)的构建方法,实现平台是Node.JS. 背 ...

  6. find命令使用, -exec xargs

    find [path]   [expression] 例如:find  /home  -name  \*.o  -exec rm '{}' \; find: 实时精确,支持众多查找标准,遍历指定目录中 ...

  7. nginx服务器的日志太多:定期执行脚本删除

    #!/bin/bash -type f -name *.log | xargs rm -f 脚本名字autodellog.sh 设置定时器(每天凌晨一点执行) [root@localhost ~]# ...

  8. Python的简介以及安装和第一个程序以及用法

    Python的简介: 1.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Pytho ...

  9. Python学习_IDLE快捷键以及列表相关杂记

    IDLE快捷键 Tab完成:键入部分代码,按下TAB键,IDLE将给出列表帮助完成语句 回退代码语句:按下Alt+P(Previous),可以回退到IDLE中之前输入的代码语句, 下一个代码语句:按下 ...

  10. 转 mysql 中sql 语句查询今天、昨天、7天、近30天、本月、上一月 数据

    转自 http://blog.csdn.net/ve_love/article/details/19685399