c语言实现系统时间校正工具代码分享
//*******************************************************************
//Time Protocol是一种非常简单的应用层协议。它返回一个未格式化的32位二进制数字,
//这个数字描述了从1900年1月1日午夜到现在的秒数。服务器在端口37监听协议请求,以
//TCP/IP或者UDP/IP格式返回响应。将服务器的返回值转化为本地时间是客户端程序的责任。
//这里使用的时间服务器是129.132.2.21,更多的服务器地址在“http://tf.nist.gov/service/time-servers.html
//网站列出。
//*******************************************************************
#include<iostream>
#include<WinSock2.h>
usingnamespacestd;
#pragmacomment(lib,"ws2_32")
voidSetTimeFromTP(ULONGulTime)
{
//Windows文件时间是一个64位的值,它是从1601年1月1日中午12:00到现在的时间间隔,
//单位是1/10000000秒,即1000万分之1秒
FILETIMEft;
SYSTEMTIMEst;
st.wYear=1900;
st.wMonth=1;
st.wDay=1;
st.wHour=0;
st.wMinute=0;
st.wSecond=0;
st.wMilliseconds=0;
SystemTimeToFileTime(&st,&ft);
//然后将TimeProtocol使用的基准时间加上已经逝去的时间,即ulTime
LONGLONG*pllLong=(PLONGLONG)&ft;
//注意文件时间单位是1/10000000秒,即1000万分之1秒
*pllLong+=(LONGLONG)10000000*ulTime;
//再将时间转化回来,更新系统时间
FileTimeToSystemTime(&ft,&st);
SetSystemTime(&st);
}
intmain(intargc,char**argv)
{
WSADATAwsaData;
WSAStartup(WINSOCK_VERSION,&wsaData);
SOCKETs=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==s)
{
cout<<"socketerror:"<<GetLastError()<<endl;
return0;
}
SOCKADDR_INservAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_port=htons(37);
servAddr.sin_addr.S_un.S_addr=inet_addr("129.132.2.21");
if(-1==connect(s,(PSOCKADDR)&servAddr,sizeof(servAddr)))
{
cout<<"connecterror:"<<WSAGetLastError()<<endl;
return0;
}
//等待接收时间协议返回,最好使用异步IO,以便设置超时
ULONGulTime=0;
intiRecv=recv(s,(char*)&ulTime,sizeof(ulTime),0);
if(iRecv>0)
{
ulTime=ntohl(ulTime);
SetTimeFromTP(ulTime);
cout<<"成功与服务器时间同步!"<<endl;
}
else
{
cout<<"时间服务器不能确定当前时间!"<<endl;
}
shutdown(s,SD_RECEIVE);
closesocket(s);
WSACleanup();
return0;
}
相关文章
- 这篇文章主要介绍了C# 当前系统时间获取及时间格式详解的相关资料,这里提供代码实例,帮助大家学习参考,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了 C/C++如何获取当前系统时间的实例详解的相关资料,这里提供了几种实现方法,帮助大家实现这样的功能,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C#实现修改系统时间的方法,是一个非常实用的功能,需要的朋友可以参考下...2020-06-25
- 编写Windows批处理时经常会需要使用到日期和时间作为文件名,每次备份都可以使用不同名字,所以是非常重要的...2020-06-30
- 本文给大家汇总介绍了5种VC++中获取系统时间的方法,十分的简单实用,有需要的小伙伴可以参考下。...2020-04-25
- 这篇文章主要介绍了c语言实现系统时间校正工具,大家参考使用吧...2020-04-25
- 在本篇文章里小编给大家整理的是一篇关于Oracle数据库服务器修改操作系统时间的注意事项详解,需要的朋友们可以参考下。...2020-07-11
C#利用win32 Api 修改本地系统时间、获取硬盘序列号
这篇文章主要介绍了C#利用win32 Api 修改本地系统时间、获取硬盘序列号的方法及代码分享,需要的朋友可以参考下...2020-06-25- 这篇文章主要介绍了JSP实时显示当前系统时间的四种方式示例解析,文章通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-16
- 这篇文章主要介绍了Cocos2d-x中获取系统时间和随机数实例,本文代码含有大量注释来讲解获取系统时间和随机数的方法,需要的朋友可以参考下...2020-04-25
- 服务时间显示不正确,可能有3个原因造成(数据库服务于后台服务分开时,属于俩个虚拟机):1. 数据库服务所在虚拟机的时间和时区显示正确2. Oracle服务的的时间和时区显示正确3....2021-09-12