c语言实现系统时间校正工具代码分享

 更新时间:2014年01月24日 15:54:31   作者:  
这篇文章主要介绍了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语言实现链表贪吃蛇

    C语言实现链表贪吃蛇

    这篇文章主要为大家详细介绍了C语言实现链表贪吃蛇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • C语言 以字符形式读写文件详解及示例代码

    C语言 以字符形式读写文件详解及示例代码

    本文主要介绍C语言 以字符形式读写文件,这里整理了读写文件的一些资料并附示例代码,供大家学习参考,有需要的小伙伴可以参考下
    2016-08-08
  • 解析C语言中位字段内存分配的问题

    解析C语言中位字段内存分配的问题

    本篇文章是对C语言中位字段内存分配的问题进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++设计模式之模板方法模式(TemplateMethod)

    C++设计模式之模板方法模式(TemplateMethod)

    这篇文章主要为大家详细介绍了C++设计模式之模板方法模式TemplateMethod,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • C++ 关于MFC List Control 控件的总结

    C++ 关于MFC List Control 控件的总结

    这篇文章主要介绍了C++ 关于MFC List Control 控件的总结的相关资料,十分的详细,有需要的朋友可以参考下
    2015-06-06
  • 浅谈c++中的while(cin)问题

    浅谈c++中的while(cin)问题

    下面小编就为大家带来一篇浅谈c++中的while(cin)问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • C语言仿QQ聊天界面抖动功能

    C语言仿QQ聊天界面抖动功能

    这篇文章主要为大家详细介绍了C语言仿QQ聊天界面抖动功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • C++命令行解析包gflags的使用教程

    C++命令行解析包gflags的使用教程

    这篇文章主要给大家介绍了关于C++命令行解析包gflags的使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 详谈C++中虚基类在派生类中的内存布局

    详谈C++中虚基类在派生类中的内存布局

    下面小编就为大家带来一篇详谈C++中虚基类在派生类中的内存布局。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C++中的变长参数深入理解

    C++中的变长参数深入理解

    变长参数的函数,即参数个数可变、参数类型不定的函数。设计一个参数个数可变、参数类型不定的函数是可能的,最常见的例子是printf函数、scanf函数和高级语言的Format函数。最近的一个项目中就遇到这么一个相关的问题,感兴趣的朋友们下面来一起看看吧。
    2016-10-10

最新评论