本程序用于校正本机时间
http://blog.csdn.net/qq752923276/article/details/7591198
以下是使用方法
1、默认方式,使用默认时间服务器时间校正本机时间
2、命令行附加一个时间服务器IP参数,将根据指定时间服务器时间校正本机时间,如:timecalibration.exe 132.163.4.102

代码:

// timecalibration.cpp : Defines the entry point for the console application.
//
/************************************************************************/
/* http://blog.csdn.net/qq752923276/article/details/7591198             */
/************************************************************************/
#include "stdafx.h"
#include <WinSock2.h>
#include <windows.h>
#include <cstdio>
#include <cassert>#pragma comment(lib,"ws2_32.lib")class InitSocket
{
public:InitSocket(){WSADATA wsaData={0};assert(::WSAStartup(MAKEWORD(2,2),&wsaData)==0);}~InitSocket(){::WSACleanup();}
};
InitSocket initsocket;
/************************************************************************/
/*       timesrv:132.163.4.101132.163.4.102132.163.4.103                                                    */
/************************************************************************/
char szIP[32]="132.163.4.101";bool SetTime(DWORD tm)
{FILETIME      ft={0};     SYSTEMTIME    stTM={0};     stTM.wYear         = 1900 ;stTM.wMonth        = 1 ;stTM.wDay          = 1 ;::SystemTimeToFileTime (&stTM, &ft);   LARGE_INTEGER li ;            //64位大整数li = * (LARGE_INTEGER *) &ft;li.QuadPart += (LONGLONG) 10000000 * tm; ft = * (FILETIME *) &li;::FileTimeToSystemTime (&ft, &stTM);return ::SetSystemTime (&stTM)==TRUE;
}
BOOL SetConsoleColor(WORD wAttributes)
{  HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);  if (hConsole == INVALID_HANDLE_VALUE)  return FALSE;  return SetConsoleTextAttribute(hConsole, wAttributes);
}
int main(int argc, char* argv[])
{assert(SetConsoleColor( FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY));do{if(argc==1){puts("本程序用于校正本机时间");puts("http://blog.csdn.net/qq752923276\r\n");   puts("以下是使用方法");puts("1、默认方式,使用默认时间服务器时间校正本机时间");puts("2、命令行附加一个时间服务器IP参数,将根据指定时间服务器时间校正本机时间,\r\n如:timecalibration.exe 132.163.4.102 ");puts("\r\n按任意键继续...");getchar();goto start;}else if(argc==2){memcpy(szIP,argv[1],lstrlen(argv[1]));start:SOCKADDR_IN addr;addr.sin_addr.S_un.S_addr=inet_addr(szIP);if(addr.sin_addr.S_un.S_addr==0xffffffff){puts("非法的IP的地址");break;}addr.sin_family=AF_INET;addr.sin_port=::htons(IPPORT_TIMESERVER);SOCKET sClient=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);assert(sClient);__try{DWORD dwset=1;  int ret=::ioctlsocket(sClient,FIONBIO,(LPDWORD)&dwset);  if (ret==SOCKET_ERROR)  {  break; }   ::connect(sClient,(SOCKADDR*)&addr,sizeof addr);  timeval timeout;  fd_set r;  FD_ZERO(&r);  FD_SET(sClient,&r);  timeout.tv_sec=1;  timeout.tv_usec=0;  ret=::select(0,0,&r,0,&timeout);  if (ret<=0) //超时或SOCKET_ERROR  {  puts("连接超时");  break;}  else  {puts("连接成功!");fd_set readset;FD_ZERO(&readset);  FD_SET(sClient,&readset);  timeout.tv_sec=1;  timeout.tv_usec=0;ret=::select(0,&readset,0,0,&timeout);if(ret>0){DWORD tm=0;int ret=::recv(sClient, (char *) &tm, sizeof tm, 0);if(ret==sizeof tm){tm=::ntohl(tm);if (SetTime(tm)){puts("校正系统时间成功!");}elseputs("设置系统时间失败!");}elseputs("接收失败!");}else{puts("接收超时");}}  }__finally{closesocket(sClient);}}}while(0);puts("\r\n按任意键退出...");getchar();return 0;
}

另,根据中国授时中心校准时间(NTP协议):

//---------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include <time.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
//---------------------------------------------------------------------------#pragma argsusedstruct   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;
};
BOOL SetTime()
{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是中国大陆时间同步服务器地址,可自行修改// 中国国家授时中心的IP地址是:210.72.145.44SOCKET 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_addr.S_un.S_addr=inet_addr("time-a.timefreq.bldrdoc.gov");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;
}
int main(int argc, char* argv[])
{SetTime();return 0;
}
//---------------------------------------------------------------------------

根据时间服务器校正系统时间-对时相关推荐

  1. sw服务器的系统时间,linux的系统时间

    设置系统日期和时间 将 BIOS 时钟设置为正确的 UTC 时间 配置时区 配置 Network Time Protocol(NTP)服务,包括纠正时钟漂移 Linux 上的系统时间非常重要.在前面已 ...

  2. 苹果当前系统时间与服务器不一致,苹果iOS14时钟Bug与系统时间不同 比系统时间慢了3小时...

    苹果iOS14时钟Bug与系统时间不同 苹果刚发布了iOS14正式版,新增了类似于安卓负一屏的功能,可以添加时钟组件.近日,网友发现iOS14时钟出现Bug,时钟插件显示时间比系统时间慢了整整三个小时 ...

  3. 修改服务器2003系统时间,windows2003 时间服务器ntp配置

    发表于:2010-05-02 23:04 | 点击: 212 次 |标签 : 服务器 在Windows 2003 Server 系统下配置成功 1.默认情况下,独立服务器WINDOWS SERVER ...

  4. 终于找到macOS校正系统时间方法了

    因为需要准确的系统时间需要校正macOS的系统时间,试了很多方法都不奏效,最后歪打正着,下边的方法,立即搞定. Homebrew如果没有安装,可以csdn搜索一下安装教程. 安装 Homebrew 后 ...

  5. 如何自动校正系统时间

    网上一些校正系统时间的方法,大多需要手动操作,有没有什么工具可以自动完成相关的操作呢?     可以试试NetTime工具(http://www.timesynctool.com/).安装该工具时会创 ...

  6. cdma信息服务器,【CDMA网络时间服务器(CDMA网络时间服务器)】 - 太平洋安防网

    [参数说明] 品牌:zxkj 型号::HR系列 规格::机架式 [详细描述] 网络时间服务器-cdma网络时间服务器 网络时间服务器-cdma网络时间服务器 网络时间服务器-cdma网络时间服务器 网 ...

  7. CentOS 7 查看系统时间、更新系统时间 、修改系统时间

    查看系统容时间,硬件时间 date //查看系统时间hwclock //查看硬件时间 timedatectl # 查看系统时间方面的各种状态Local time: 四 2014-12-25 10:52 ...

  8. linux 系统时间 硬件时间,linux 设置系统时间和硬件时间

    linux 的系统时间有时跟硬件时间是不同步的 Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel ...

  9. asp.net站点时间格式与系统时间格式不一致。手动修改

    asp.net站点时间格式与系统时间格式不匹配时,当修改系统时间格式,站点时间可能还是旧的格式.则可通过修改注册表更新时间格式. 1.开始-运行-输入regedit,依次找到HKEY-Users\.D ...

最新文章

  1. 伍迷创意随想集 之 烧菜小帮手
  2. 计算机技能最新需求排名:Python增速爆炸,SQL和Java老当益壮,AWS令人惊讶
  3. IhttpHandler
  4. 科大星云诗社动态20210518
  5. Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
  6. SpringBoot最简单服务配置
  7. ssl2294-打包【dp练习】
  8. AD Keepout layer在3D视图中显示过孔、穿层
  9. 频率采样型滤波器matlab,频率采样法设计带通滤波器matlab.doc
  10. 移动安全工具:fastboot
  11. java生成word带多级标题,word文档怎样设置自动生成多级标题
  12. 增值税发票税控开票软件 无法正常启动
  13. 学生HTML个人网页作业作品:基于web在线汽车网站的设计与实现 (宝马轿车介绍)
  14. 树莓派python串口收发数据
  15. 【Oracle】快速向表中插入大量数据Oracle中append与Nologging
  16. 牛小刚的Spring自学笔记之IOC
  17. geany java编译器乱码_Ubuntu Geany打开文件乱码的解决方法
  18. java写一个文件浏览器_【Java】 实现一个简单文件浏览器(2)
  19. 团队合作难,归根到底是老板领导力不行
  20. 如何找自己想要的项目?看这里告诉你答案

热门文章

  1. 如何才能有论文创新点?idear
  2. 人工智能Python有哪些应用方向?
  3. 阿里巴巴是最好的客户关系管理实践者
  4. HTML与CSS基础笔试和期末题库
  5. arduino测方波频率(外部中断)
  6. 华硕h410csm怎么开启_华硕主板怎么设置U盘启动 华硕主板设置U盘启动教程
  7. 开源应用中心|如何快速部署你的绝佳Markdown写作平台——CodiMD
  8. 鸣鸿刀模厂家告诉你怎么去选择合适的刀模
  9. 盛大网络资产管理系统
  10. 整理国泰安财务数据库(包括利润表、现金流量表、所有者权益变动表)