在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. linux学习记录(第六章、Linux 的文件权限与目录配置)

    书看的是鸟哥的私房菜,系统用的是centos.被微软坑了N年才发现linux才是王道. 在这里记录些学习的记录.备忘

  2. How to fix “The program can’t start because MSVCR110.dll is missing from your computer.” error on Windows

    原文出处 How to fix “The program can’t start because MSVCR110.dll is missing from your computer.” error ...

  3. Asp.net中前台javascript与后台C#交互

    方法一:使用Ajax开发框架,后台方法定义前添加[AjaxPro.AjaxMethod],然后就可以在前台js脚本中调用后台C#函数. 方法二:后台方法声明为public或者protected,然后前 ...

  4. MVC小系列(七)【分部视图中的POST】

    MVC小系列(七)[分部视图中的POST] 在PartialView中进行表单提交的作用:1 这个表单不止一个地方用到,2 可能涉及到异步的提交问题 这两种情况都可能需要把表单建立在分部视图上, 使用 ...

  5. Visual C++ 打印编程技术-内存设备环境

    1.内存设备环境 内存设备环境是一个没有设备与它联系的环境.一般利用与某个标准设备环境兼容的内存设备环境把一个位图复制到屏幕上去.为此可以先创建一个与某个标准设备环境兼容的内存设备环境,然后把所要显示 ...

  6. EasyUI中combotree允许多选的时候onSelect事件会重复触发onCheck事件

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgEAAADkCAIAAACOkmAuAAAgAElEQVR4nO2dW2wc15nnO0EQBJsdzA

  7. 销毁session

    session运行在服务器是单用户,每个session都有一个唯一的sessionid 用法:session.setAttribute("userName", "张三丰& ...

  8. Core模块其他常用知识点[OpenCV 笔记14]

    Matx 轻量级的Mat,必须在使用前规定好大小,比如一个2x3的float型的Matx,可以声明为Matx23f Vec Vec是Matx的一个派生类,是一个一维的Matx,跟vector很相似.在 ...

  9. js stringObject的indexOf方法

    我所写的这个是基本知识的基本知识,为什么我还是要写呢,所谓说好记性不如烂比头,作为一名前端开发人员,太多相似的代码见的又太多,但是又不常见,所以很容易忘记,那我把indexOf原理讲清楚 indexO ...

  10. Xshell配色方案

    几个比较喜欢的Xshell配色方案,备份记录下 [Names] count=1 name0=SolarizedDark [SolarizedDark] text(bold)=839496 magent ...