VC自动与Internet时间服务器同步更新
在VCKBASE、CSDN里挖了许久的坟,才找到一些有点用的资料,最后自己整理出这样的个函数,方面VC实现时间同步,多的不说,自己看源码,根据自己的需要可以适当修改源码:
- #include <WinSock.h>
- #pragma comment (lib,"Ws2_32")
- struct NTP_Packet
- {
- int Control_Word;
- int root_delay;
- int root_dispersion;
- int reference_identifier;
- __int64 reference_timestamp;
- __int64 originate_timestamp;
- __int64 receive_timestamp;
- int transmit_timestamp_seconds;
- int transmit_timestamp_fractions;
- };
- /************************************************************************/
- /* 函数说明:自动与时间服务器同步更新
- /* 参数说明:无
- /* 返 回 值:成功返回TRUE,失败返回FALSE
- /************************************************************************/
- BOOL UpdateSysTime()
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- // 初始化版本
- wVersionRequested = MAKEWORD( 1, 1 );
- if (0!=WSAStartup(wVersionRequested, &wsaData))
- {
- WSACleanup();
- return FALSE;
- }
- if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
- {
- WSACleanup( );
- return FALSE;
- }
- // 这个IP是中国大陆时间同步服务器地址,可自行修改
- SOCKET soc=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
- struct sockaddr_in addrSrv;
- addrSrv.sin_addr.S_un.S_addr=inet_addr("210.72.145.44");
- addrSrv.sin_family=AF_INET;
- addrSrv.sin_port=htons(123);
- NTP_Packet NTP_Send,NTP_Recv;
- NTP_Send.Control_Word = htonl(0x0B000000);
- NTP_Send.root_delay = 0;
- NTP_Send.root_dispersion = 0;
- NTP_Send.reference_identifier = 0;
- NTP_Send.reference_timestamp = 0;
- NTP_Send.originate_timestamp = 0;
- NTP_Send.receive_timestamp = 0;
- NTP_Send.transmit_timestamp_seconds = 0;
- NTP_Send.transmit_timestamp_fractions = 0;
- if(SOCKET_ERROR==sendto(soc,(const char*)&NTP_Send,sizeof(NTP_Send),
- 0,(struct sockaddr*)&addrSrv,sizeof(addrSrv)))
- {
- closesocket(soc);
- return FALSE;
- }
- int sockaddr_Size =sizeof(addrSrv);
- if(SOCKET_ERROR==recvfrom(soc,(char*)&NTP_Recv,sizeof(NTP_Recv),
- 0,(struct sockaddr*)&addrSrv,&sockaddr_Size))
- {
- closesocket(soc);
- return FALSE;
- }
- closesocket(soc);
- WSACleanup();
- SYSTEMTIME newtime;
- float Splitseconds;
- struct tm *lpLocalTime;
- time_t ntp_time;
- // 获取时间服务器的时间
- ntp_time = ntohl(NTP_Recv.transmit_timestamp_seconds)-2208988800;
- lpLocalTime = localtime(&ntp_time);
- if(lpLocalTime == NULL)
- {
- return FALSE;
- }
- // 获取新的时间
- newtime.wYear =lpLocalTime->tm_year+1900;
- newtime.wMonth =lpLocalTime->tm_mon+1;
- newtime.wDayOfWeek =lpLocalTime->tm_wday;
- newtime.wDay =lpLocalTime->tm_mday;
- newtime.wHour =lpLocalTime->tm_hour;
- newtime.wMinute =lpLocalTime->tm_min;
- newtime.wSecond =lpLocalTime->tm_sec;
- // 设置时间精度
- Splitseconds=(float)ntohl(NTP_Recv.transmit_timestamp_fractions);
- Splitseconds=(float)0.000000000200 * Splitseconds;
- Splitseconds=(float)1000.0 * Splitseconds;
- newtime.wMilliseconds = (unsigned short)Splitseconds;
- // 修改本机系统时间
- SetLocalTime(&newtime);
- return TRUE;
- }
http://blog.csdn.net/wangningyu/article/details/4522648
VC自动与Internet时间服务器同步更新的更多相关文章
- 自动与因特网时间服务器同步 NTP 服务器 pool.ntp.org, 120.24.166.46 端口 123
自动与因特网时间服务器同步 NTP 服务器 pool.ntp.org 海康提供的NTP服务器 120.24.166.46 端口 123
- c# Internet时间服务器同步
2009-02-02 17:48 8226人阅读 评论(2) 收藏 举报 服务器internetc#socketstringwindows 需要用到的名空间 using System.Net; usi ...
- 小凡的Linux主机与时间服务器同步记录
小凡的Linux主机与时间服务器同步记录 导读 我们新安装的Linux主机,如果没有做与互联网服务器时间同步的处理的话,当我们使用date命令的时候,我们就看不到当前的时间,只能看到过去的时间.在我们 ...
- 设置linux服务器定时与时间服务器同步
在一些大公司经常出现这样一个情况:公司或一些机关单位的内部业务系统的应用服务器以及数据都是做的多机集群部署而且基本都是linux系统,而且都是内部网,不与外网通讯的.这样经常就会出现一个情况,我发送任 ...
- centos下部署NTP时间服务器同步环境记录
1)服务端部署 安装所需软件包 [root@test ~]# yum -y install ntp ntpdate 服务端自己先手工同步一次时间. [root@test ~]# ntpdate ntp ...
- Linux基础命令---ntpstat显示时间服务器同步
ntpstat ntpstat指令用于显示本机上一次和服务器同步时间的情况. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 ntpstat 2 ...
- 分享淘宝时间服务器同步时间接口api和苏宁时间服务器接口api
最近要开发一款抢购秒杀的小工具,需要同步系统时间,这里分享两个时间服务器接口api给大家: 1.淘宝时间服务器时间接口 http://api.m.taobao.com/rest/api3.do?api ...
- chronyd时间服务器同步时间配置
chrony是两个用来维持计算机系统时钟准确性的程序,这两个程序命名为chronyd和chronyc. chronyd是一个在系统后台运行的守护进程.他根据网络上其他时间服务器时间来测量本机时间的偏移 ...
- linux下自动同步internet时间
linux下很简单直接一句即可: ntpdate time.nist.gov ntp后面参数为internet时间服务器url或ip即可. 但是ntpdate命令需要root特权,如果做成自动运行每次 ...
随机推荐
- magento中的一些技巧
1.加载某个attribute: $attributeCode=Mage::getModel('catalog/resource_eav_attribute') ...
- java Spring配置数据单元
基本原理 - 容器和bean 在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean. 简单地讲,bean就是由Spring容器初始化 ...
- Git 个人/团队项目的创建(一步一图)
好吧,不能从简书上直接拷贝过来,所以这里如果有想了解的就直接去我的简书吧. 简书地址
- JS模版引擎[20行代码实现模版引擎读后感]
曾经阅读过<只有20行JAVASCRIPT代码, 手把手教你写一个页面模版引擎>这篇文章, 对其中实现模版的想法实在膜拜, 于是有了这篇读后感, 谈谈自己对模版引擎的理解, 以及用自己的语 ...
- 10.10_魔兽账号,OSC代码托管演示,研究SQL别忘记了,git
(1)juedui8456juedui456chixin0769魔兽世界账号112288 (2)EasyXls.开源中国推出 PaaS@OSC 代码演示和运行平台.git.oschina.coding ...
- identifier not found error on function call
在C++工程中,自定义一个方法 void fgetsDemo(),在main 方法中调用,源代码如下: #include "stdafx.h" #include <stdio ...
- 九度OJ 1361 翻转单词顺序
题目地址:http://ac.jobdu.com/problem.php?pid=1361 题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Ca ...
- 关于C# Winform 程序开机自动启动
1.程序运行时调用下面方法即可. /// <summary> /// 设置开机自动启用 /// </summary> private void SetAutoStart() { ...
- Mock相关收集
MockMVC+Mockito http://www.cnblogs.com/syxchina/p/4150879.html Spring中使用Mockito http://www.cnblogs.c ...
- mac中的xampp配置xdebug
[xdebug] zend_extension=/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/ ...