注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

长风明志的博客

不要也不能做下一个谁,应该且可以做第一个自己

 
 
 

日志

 
 

Win32平台下使用C++编程根据网络标准设置Windows系统时间  

2012-09-27 22:13:06|  分类: VC++/MFC编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近Windows系统时间偶尔会出错,于是想能不能搞个程序根据网络上开放的一些标准时间接口更新自己的系统时间,然后搞个计划任务让其开机自动执行,这样就不用担心系统时间问题了(否则,用chrome以https协议访问一些网站会失败,证书授权失败)。
Win32平台下使用C++编程根据网络标准设置Windows系统时间 - changfengmingzhi - 长风明志的博客
 
以下是完整的程序(Win32平台下):
#include <WinSock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
void setTimeFromInternet(ULONG ulTime)  //根据返回的时间设置系统时间
{
   FILETIME ft;
   SYSTEMTIME st;
   //将基准时间转换成Windows文件时间
   st.wYear=1900;
   st.wMonth=1;
   st.wDay=1;
   st.wHour=0;
   st.wMinute=0;
   st.wSecond=0;
   st.wMilliseconds=0;
   SystemTimeToFileTime(&st,&ft);
   LONGLONG* pLLong=(LONGLONG*)&ft;
   *pLLong+=(LONGLONG)10000000*ulTime;
   FileTimeToSystemTime(&ft,&st);
   ::SetSystemTime(&st);
   GetLocalTime(&st);
   printf("已成功设置时间为:%4d年%2d月%2d日 %2d:%2d:%2d\n",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
}
void main()
{
   WORD wVersionRequested;
   WSADATA wsaData;
   int err;
   wVersionRequested=MAKEWORD(1,1);
   err=WSAStartup(wVersionRequested,&wsaData);
   if(err!=0)
   {
      return;
   }
   if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
   {
     WSACleanup();
     return;
   }
   SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
   SOCKADDR_IN addrSrv;
   //addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
   addrSrv.sin_addr.S_un.S_addr=inet_addr("69.25.96.13");   //试了210.72.145.44,没有返回值。
   addrSrv.sin_family=AF_INET;
   addrSrv.sin_port=htons(37);
   connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
   char recvBuffer[100];
   ULONG ulTime=0;
   //recv(sockClient,recvBuffer,100,0);
   int nRecv=recv(sockClient,(char*)&ulTime,sizeof(ulTime),0);
   if(nRecv>0)   //有收到数据
   {
       //printf("%ul\n",ulTime);
       ulTime=::ntohl(ulTime);
       setTimeFromInternet(ulTime);
       //printf("%ul\n",ulTime);
   }
   else
   {
       printf("recv error...\n");
       return;
   }
   //printf("%s\n",recvBuffer);
   //send(sockClient,"This is Kara",strlen("This is Kary")+1,0);
   closesocket(sockClient);
   WSACleanup();
}
  评论这张
 
阅读(1325)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017