c语言实现系统时间校正工具代码分享
本文导语: 代码如下://*******************************************************************//Time Protocol是一种非常简单的应用层协议。它返回一个未格式化的32位二进制数字, //这个数字描述了从1900年1月1日午夜到现在的秒数。服务器在端口37监听协议请...
//*******************************************************************
//Time Protocol是一种非常简单的应用层协议。它返回一个未格式化的32位二进制数字,
//这个数字描述了从1900年1月1日午夜到现在的秒数。服务器在端口37监听协议请求,以
//TCP/IP或者UDP/IP格式返回响应。将服务器的返回值转化为本地时间是客户端程序的责任。
//这里使用的时间服务器是129.132.2.21,更多的服务器地址在“http://tf.nist.gov/service/time-servers.html
//网站列出。
//*******************************************************************
#include
#include
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