如何进行网络对时
来源:互联网 发布:lambda函数 python 编辑:程序博客网 时间:2024/05/02 01:05
注意添加头文件
#include <iostream>
#include <vector>
using namespace std;
#include<math.h>
//时间同步
CSocket sockClient;
TIME_ZONE_INFORMATION tzinfo;DWORD dwStandardDaylight;
long bias,sminute,shour;
vector <string> vi;
string strServer;
BOOL ret;
//将时间服务器放在一个VECTOR中。
strServer = "time.nist.gov";
vi.push_back(strServer);
strServer = "time-a.nist.gov";
vi.push_back(strServer);
strServer = "time-b.nist.gov";
vi.push_back(strServer);
strServer = "time-nw.nist.gov";
vi.push_back(strServer);
strServer = "nist1.nyc.certifiedtime.com";
vi.push_back(strServer);
strServer = "time-b.nist.gov";
vi.push_back(strServer);
//初始化CSocket
AfxSocketInit();
sockClient.Create(); //创建socket
UpdateData(FALSE);
dwStandardDaylight = GetTimeZoneInformation(&tzinfo); //获取时区与UTC的时间差 应该返回-8
bias = tzinfo.Bias;
if (dwStandardDaylight == TIME_ZONE_ID_INVALID) //函数执行失败
{
return;
}
if (dwStandardDaylight == TIME_ZONE_ID_STANDARD) //标准时间有效
bias += tzinfo.StandardBias;
if (dwStandardDaylight == TIME_ZONE_ID_DAYLIGHT) //夏令时间
bias += tzinfo.DaylightBias;
shour = bias/60;
sminute = fmod(bias,60);
/*
原型:extern float fmod(float x, float y);
用法:#include <math.h> 功能:计算x/y的余数 说明:返回x-n*y,符号同y。n=[x/y](向离开零的方向取整)
*/
//循环判断服务器是否连接成功
for (int n=0; n < vi.size(); ++ n)
{
ret = sockClient.Connect(vi[n].c_str(),13);
if (1 == ret)
break;
}
unsigned char nTime[40]; //临时接收数据要求足够的大
memset(nTime, 0, sizeof(nTime));
sockClient.Receive(nTime, sizeof(nTime)); //接收服务器发送来得的数据
sockClient.Close(); //关闭socket
CString strTime;
strTime.Format("%s",nTime);
int first=strTime.Find("-");
int second=strTime.Find("-",first+1);
int tfirst = strTime.Find(":");
int tsecond = strTime.Find(":",tfirst+1);
int hyear=2000+atoi(strTime.Mid(first-2,2));
int hmonth=atoi(strTime.Mid(first+1,2));
int hday=atoi(strTime.Mid(second+1,2));
int hhour=atoi(strTime.Mid(tfirst-2,2))-shour;
int hminute=atoi(strTime.Mid(tfirst+1,2))-sminute;
int hsecond=atoi(strTime.Mid(tsecond+1,2));
CTime temptime(hyear,hmonth,hday,hhour,hminute,hsecond);
//设置系统时间
SYSTEMTIME systm;
systm.wYear = temptime.GetYear();
systm.wMonth = temptime.GetMonth();
systm.wDay = temptime.GetDay();
systm.wHour = temptime.GetHour();
systm.wMinute = temptime.GetMinute();
systm.wSecond = temptime.GetSecond();
systm.wMilliseconds = 0;
if(0 != ::SetLocalTime(&systm))
{
UpdateData(FALSE);
AfxMessageBox("本地时间设置成功!!!");
}
else
{
UpdateData(FALSE);
AfxMessageBox("本地时间设置失败!!!");
}
0 0
- 如何进行网络对时
- 如何对Android设备进行网络抓包
- GSM Hacking:如何对GSM/GPRS网络测试进行测试?
- 如何进行网络直播
- 是否需要对网络传输数据进行压缩?如何选择压缩算法?
- 如何对算法进行测试
- 如何对网站进行监控
- 如何对 EJB 进行单元测试
- 如何对DataSet进行排序
- 如何对eclipse进行汉化
- 主力如何进行对敲倒盘
- 如何对音频文件进行剪辑
- 如何对界面进行单元测试
- 如何对pHPwin进行二次开发!
- 如何对程序员进行绩效考核
- 如何对产品进行改进
- 如何对directive进行单元测试?
- 如何对数组进行初始化
- 农民抗征地住帐篷夜间起火1死3伤
- 央行暂停8家支付机构
- 正规式->最小化DFA说明
- 作业TestBooleanOpetators
- Spring容器中bean的初始化和销毁工作
- 如何进行网络对时
- outlook 2013 卡在正在加载配置文件
- 用两个栈实现队列与用两个队列实现栈
- 【歌德:相信生活】他用了近61年
- Databus deploy toplogy
- 而那份温暖也永远的珍藏在我的心中
- 如果突然
- 算法 线性时间排序算法
- 一个数据包的互联网漫游记