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特权,如果做成自动运行每次 ...
随机推荐
- Verilog HDL常用的行为仿真描述语句
一.循环语句 1.forever语句 forever语句必须写在initial模块中,主要用于产生周期性波形. 2.利用for.while循环语句完成遍历 for.while语句常用于完成遍历测试.当 ...
- C#后台验证身份证号码的一个方法
简单的调用了正则表达式进行简单的验证,记下来留着以后备用 if ((!Regex.IsMatch(txtID.Text, @"^(^\d{15}$|^\d{18}$|^\d{17}(\d|X ...
- android开发者博客二月Android Studio2.0测试
参考网页-http://android-developers.blogspot.com/2016/02/android-studio-20-beta.html Android Studio 2.0-B ...
- box-shadow 与 filter:drop-shadow 详解及奇技淫巧
box-shadow 在前端的 CSS 编写工作想必十分常见.但是 box-shadow 除去它的常规用法,其实还存在许多不为人知的奇技淫巧. 喜欢 markdown 版本的可以戳这里. box-sh ...
- 10个你可能不知道的JavaScript小技巧
1.变量转换 看起来很简单,但据我所看到的,使用构造函数,像Array()或者Number()来进行变量转换是常用的做法.始终使用原始数据类型(有时也称为字面量)来转换变量,这种没有任何额外的影响的做 ...
- jenkins(二)项目构建
通过上一篇“jenkins(一)集成环境搭建示例”,已经完成了jenkins的安装,基本配置,启动,下面继续小结jenkins使用 一.jenkins系统配置 访问jenkins,点击系统管理-> ...
- java新手笔记23 异常
1.import package com.yfs.javase; import java.util.Scanner; //import java.lang.String;//默认导入 public c ...
- java新手笔记1 Hello World!
//Hello.java文件 //类声明 public class Hello{ //声明方法 main程序入口 public static void main (String[] args) { S ...
- 飞锐GIS开发基础系列
3s知识库和GIS科研站,未经允许,禁止任何形式的复制.转载和传播.联系方式:276888624@qq.com 品GIS,品开发,品人生...... http://www.3sbase.com/3sb ...
- 基于C语言EOF与getchar()的使用详解
转自:http://www.jb51.net/article/36848.htm 大师级经典的著作,要字斟句酌的去读,去理解.以前在看K&R的The C Programming Langu ...