📄 time.cpp
字号:
// time.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
//#include <iostream.h>
#include <TCHAR.H>
#include <winsock.h>
#pragma comment (lib,"Ws2")
//#define UNICODE
//#define _UNICODE
#define _countof(array) (sizeof(array)/sizeof(array[0]))
#define HIGHTIME 21968699 // 21968708 // Jan 1, 1900 FILETIME.highTime
#define LOWTIME 4259332096 // 1604626432 // Jan 1, 1900 FILETIME.lowtime
//using namespace std;
//NTP服务器列表
struct NISTSVR{
int key; //编号
in_addr addr; //IP地址
LPCTSTR IPinfo;
LPCTSTR server; //域名
LPCTSTR info; //信息
} NISTSVRSARY[] = {
{ 0, {0,0,0,0}, NULL, NULL},
{ 1, {129,6,15,28},_T("129.6.15.28"), _T("time-a.nist.gov"),_T("NIST,盖士堡,马里兰州") },
{ 2, {129,6,15,29}, _T("129.6.15.29"),_T("time-b.nist.gov"),_T("NIST,盖士堡,马里兰州") },
{ 3, {132,163,4,101},_T("132.163.4.101"), _T("time-a.timefreq.bldrdoc.gov"),_T("NIST,博耳德市,科罗拉多州") },
{ 4, {132,163,4,102}, _T("132.163.4.102"),_T("time-b.timefreq.bldrdoc.gov"),_T("NIST,博耳德市,科罗拉多州") },
{ 5, {132,163,4,103}, _T("132.163.4.103"),_T("time-c.timefreq.bldrdoc.gov"),_T("NIST,博耳德市,科罗拉多州") },
{ 6, {128,138,140,44},_T("128.138.140.44"), _T("tutcnist.colorado.edu"),_T("科罗拉多大学,博耳德市") },
{ 7, {192,43,244,18}, _T("192.43.244.18"),_T("time.nist.gov"),_T("NCAR,博耳德市,科罗拉多州") },
{ 8, {131,107,1,10}, _T("131.107.1.10"),_T("time-nw.nist.gov"),_T("Microsoft,雷蒙德,华盛顿州") },
{ 9, {208,184,49,129},_T("208.184.49.129"), _T("nist1.nyc.certifiedtime.com"),_T("纽约市") },
};
//所选择的NTP服务器
static int choice = 0;
void usage()
{
wprintf( L"\n\t-----网络时间同步程序 V1.00 ------\n" );
wprintf( L"\t 长城信息产业股份有限公司 版权所有 @2005 \n" );
wprintf( L"\t----------------------------------------------\n\n" );
int l = _countof(NISTSVRSARY);
for (int i= 1; i< l; i++){
wprintf(L"%d.域名:%s IP:[%s] %s\n", NISTSVRSARY[i].key, NISTSVRSARY[i].server,
NISTSVRSARY[i].IPinfo, NISTSVRSARY[i].info);
}
}
BOOL UpdateSysTime(DWORD dwTime)
{
UINT64 uiCurTime, uiBaseTime, uiResult;
SYSTEMTIME st;
uiBaseTime = ((UINT64) HIGHTIME << 32) + LOWTIME;
uiCurTime = (UINT64)dwTime * (UINT64)10000000;
uiResult = uiBaseTime + uiCurTime;
FileTimeToSystemTime((LPFILETIME)&uiResult, &st);
return SetSystemTime(&st);
}
BOOL GetTimeFromServer(DWORD *lpdwTime)
{
*lpdwTime = 0;
BOOL bReturn= FALSE;
SOCKET sSock = socket(AF_INET, SOCK_STREAM, 0);
if(INVALID_SOCKET != sSock)
{
struct sockaddr_in sin;
memcpy(&sin.sin_addr, &NISTSVRSARY[choice].addr, sizeof(in_addr));
sin.sin_family = AF_INET;
sin.sin_port = htons(IPPORT_TIMESERVER);
wprintf( L"\n ...等待连接中 ...\n");
if(0 == connect(sSock, (struct sockaddr *) &sin, sizeof(struct sockaddr_in)))
{
wprintf( L" 已经跟时间服务器建立连接.接收数据中... \n");
int iResult, iRead;
for(iRead = 0; iRead < 4; iRead += iResult)
{
iResult = recv(sSock, (char*)lpdwTime + iRead, 4 - iRead, 0);
if(iResult < 1)
break;
}
if(4 == iRead)
{
*lpdwTime = ntohl(*lpdwTime);
bReturn = TRUE;
}else
wprintf( L" 获取时间数据失败 !\n");
}else
wprintf( L" 连接超时,与服务器建立连接失败! \n");
closesocket(sSock);
}
return bReturn;
}
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
int argc=0;
WSADATA WSAData;
if(WSAStartup (MAKEWORD(1,1), &WSAData) != 0)
{
wprintf(L"初始化链接库失败.\n");
WSACleanup();
exit(1);
}
if(argc<2)
{
usage();
wprintf(L" 请选择一台时间服务器,输入相应数字(1-9之间).\n");
scanf("%d",&choice);
while (choice <= 0 || choice > 9)
{
wprintf(L" 输入错误,重新输入!输入相应数字(1-9之间).\n");
scanf("%d",&choice);
}
}
//else
// choice = atoi(&argv[1][strlen(argv[1])-1]);
DWORD dwTime;
//取服务器时间
if (GetTimeFromServer(&dwTime))
{
//更新系统时间
if (UpdateSysTime(dwTime))
{
wprintf( L" 与服务器同步时间成功.\n");
}else{
wprintf( L" 更新本要系统时间失败!\n");
}
}
WSACleanup();
wprintf( L" 按任意键退出程序!\n");
getchar();
getchar();
return 0;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -