因为上次那个获取网络时间失效了(使用的是37端口),获取网络时间并刷新本地时间(源码1)

所以网上又找了一份代码,使用的是123端口,虽然没有测试成功,这里也做下记录,估计是本机环境问题,过两天再进行测试一下。

// getNTPTime.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"using namespace std;char *GetHostIP(char *strHost)
{  char *strIP = NULL;PHOSTENT hostinfo = gethostbyname(strHost);  if(hostinfo != NULL)  {  strIP = inet_ntoa(*(struct in_addr *)*hostinfo->h_addr_list);  }  return strIP;
}  BOOL SetTimeout(SOCKET s, int nTime, BOOL bRecv)
{   int ret = ::setsockopt(s, SOL_SOCKET, bRecv ? SO_RCVTIMEO : SO_SNDTIMEO, (char *)&nTime, sizeof(nTime));   return ret != SOCKET_ERROR;
}   time_t getSNTPTime()
{  WSADATA wsa; WORD wVersionRequested; wVersionRequested = MAKEWORD(2, 0);  if (WSAStartup(wVersionRequested , &wsa)!=0) { cerr << "--->>> Winsock Initialization failed." << endl;}time_t t = 0;vector<char *> vecTimeSvr;  vecTimeSvr.push_back("ntp1.aliyun.com");vecTimeSvr.push_back("ntp2.aliyun.com");vecTimeSvr.push_back("ntp3.aliyun.com");vecTimeSvr.push_back("ntp4.aliyun.com");vecTimeSvr.push_back("ntp5.aliyun.com");vecTimeSvr.push_back("ntp6.aliyun.com");vecTimeSvr.push_back("ntp7.aliyun.com");/*vecTimeSvr.push_back("cn.pool.ntp.org");  vecTimeSvr.push_back("0.cn.pool.ntp.org");  vecTimeSvr.push_back("1.cn.pool.ntp.org");  vecTimeSvr.push_back("2.cn.pool.ntp.org");  vecTimeSvr.push_back("3.cn.pool.ntp.org");  vecTimeSvr.push_back("time.windows.com"); /*    //开放本段,可以在列表中添加更多的NTP服务器vecTimeSvr.push_back("pool.ntp.org");  vecTimeSvr.push_back("north-america.pool.ntp.org");  vecTimeSvr.push_back("south-america.pool.ntp.org");  vecTimeSvr.push_back("africa.pool.ntp.org");  vecTimeSvr.push_back("ca.pool.ntp.org");  vecTimeSvr.push_back("uk.pool.ntp.org");  vecTimeSvr.push_back("us.pool.ntp.org");  vecTimeSvr.push_back("au.pool.ntp.org");  vecTimeSvr.push_back("time.nist.gov");  vecTimeSvr.push_back("time-nw.nist.gov");  vecTimeSvr.push_back("europe.pool.ntp.org");  vecTimeSvr.push_back("asia.pool.ntp.org");  vecTimeSvr.push_back("oceania.pool.ntp.org");  */SYSTEMTIME systime;for(size_t i = 0; i < vecTimeSvr.size(); ++i)  {  char *strHostName = vecTimeSvr[i];  char *strIP = GetHostIP(strHostName);  int SIZE_SOCKADDR_IN = sizeof(SOCKADDR_IN);  sockaddr_in SvrIp;  SvrIp.sin_family        = AF_INET;  SvrIp.sin_addr.s_addr   = inet_addr(strIP);  SvrIp.sin_port          = htons(37);  int nLenRcv = 0;  char szBuff[48] = {'\0'};  szBuff[0] = 3 | (4 << 3);  SOCKET sSession = ::socket(AF_INET, SOCK_DGRAM, 0);  SetTimeout(sSession, 6000, FALSE);  if(SOCKET_ERROR != sendto(sSession, szBuff, 48, 0, (sockaddr*)&SvrIp, SIZE_SOCKADDR_IN))  {  SetTimeout(sSession, 6000, TRUE);  nLenRcv = recvfrom(sSession, szBuff, 48, 0, (sockaddr*)&SvrIp, &SIZE_SOCKADDR_IN);  }  else  {  cerr << "--->>> " << strHostName << ": " << strIP <<endl;  cerr << "--->>> send SNTP request failed!" << endl;  }  closesocket(sSession);  if(nLenRcv == 48)  {  t = 0;  for(int i = 40; i <= 43; i++)  {  unsigned char c = (unsigned char)szBuff[i];  t = (t<<8) | c;  }  tm _t;t -= 2208988800L;    // 1970.1.1 0:0:0  - 1900.1.1 0:0:0  localtime_s(&_t, &t);  cerr << "--->>> SNTP's Time - " << (_t.tm_year + 1900) << "-" << (_t.tm_mon + 1) << "-" << (_t.tm_mday) << " " << _t.tm_hour << ":" << _t.tm_min << ":" << _t.tm_sec << endl;  cerr << "--->>> " << strHostName << ": " << strIP <<endl;  cerr << endl;systime.wYear = _t.tm_year +1900;systime.wMonth = _t.tm_mon + 1;systime.wDay = _t.tm_mday;systime.wHour = _t.tm_hour;systime.wMinute = _t.tm_min;systime.wSecond = _t.tm_sec;systime.wMilliseconds = 0;systime.wDayOfWeek = -1;SetLocalTime(&systime);break;}  }  if (t == 0){cerr << "--->>> recieve all SNTP's time is failed!" << endl;  }return t;
}  int _tmain(int argc, _TCHAR* argv[])
{time_t t_1 = getSNTPTime();if (t_1 > 0){char strTime[50];ctime_s(strTime, sizeof(strTime), &t_1);cerr << "--->>> now is " << strTime << endl;}cerr << endl;system("pause");return 0;
}

获取网络时间并刷新本地时间(源码2)相关推荐

  1. linux c 设置utc时间,C/C++标准库之转换UTC时间到local本地时间详解

    前言 UTC 时间DateTime.UtcNow 和 系统本地时间 DateTime.Now 相差8个时区 ,美国本地时间和北京时间相差15个时区: 美国,而一般使用UTC时间方便统一各地区时间差异. ...

  2. 通过自定义组件学习Vue系列(二)【时间轴】(附源码)

    需求: 用于升级日志的显示 效果图: 实现原理: 主要区域分为两块,时间区和内容区,时间区是画一个圆点和显示一个时间,内容区左边一个竖线和文字显示 然后做一下循环,将每个日期的数据显示出来 布局采用f ...

  3. 易语言修改虚拟机硬盘id_易语言本地虚拟机源码

    易语言本地虚拟机源码 系统结构:显示工具路径,读入未用分区,获取分区位置,设置虚拟机分区,读入虚拟分区,操作并显示日志,处理显示错误提示,取驱动器文本列表,写配置目录,处理结果文件,格式化时间,取Do ...

  4. android flv 编码器,Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载)...

    Android 音视频深入 十七 FFmpeg 获取 RTMP 流保存为 flv (附源码下载) 项目地址 https://github.com/979451341/RtmpSave 这个项目主要代码 ...

  5. 获取网关IP和MAC 的VB源码

    '窗体上加入控件command1,然后复制下面代码,运行,按command1即可. Option Explicit Private Declare Function OpenProcess Lib & ...

  6. 生成对抗网络入门详解及TensorFlow源码实现--深度学习笔记

    生成对抗网络入门详解及TensorFlow源码实现–深度学习笔记 一.生成对抗网络(GANs) 生成对抗网络是一种生成模型(Generative Model),其背后最基本的思想就是从训练库里获取很多 ...

  7. NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码

    NanoPi NEO Air使用一:介绍 NanoPi NEO Air使用二:固件烧录 NanoPi NEO Air使用三:OverlayFS.CPU温度和频率.wifi.蓝牙.npi-config ...

  8. 学网络编程很好的参考源码

    好的参考资料对我们学习具有意想不到的作用,这个源码简单易懂,而且是面向对象的,对于C++初学者来说,非常容易理解.这里就不作介绍,反正很多人就喜欢看源码.我自己测试过可以通过编译了,源码是FreeEI ...

  9. 获取Favicon.ico网站图标接口api源码

    介绍: 获取Favicon.ico网站图标接口 favicon.ico一般用于作为缩略的网站标志,它显示位于浏览器的地址栏或者在标签上用于显示网站的logo, 目前主要的浏览器都支持favicon.i ...

最新文章

  1. 洛谷P2252 取石子游戏(威佐夫博弈)
  2. LOJ#2302 整数
  3. batch_size 和 fetch_size作用
  4. OAuth 2.0协议在SAP产品中的应用
  5. 【MySQL 中 动态sql,游标_】
  6. TreeView 之间节点拖动 /移动
  7. 在承德避暑山庄里待过,给你的最大感受是什么?
  8. linux 发生变更的文件夹,【Linux常识篇(3)】文件及文件夹的ctimeatimemtime的含义详解...
  9. 牛客网–华为机试在线训练4:字符串分隔
  10. Javascript算法:非固定宽度滑动窗口算法
  11. Android调用高德地图服务
  12. ExtJS 可视化开发工具大全
  13. 趋势杀毒文件服务器版10用户,趋势杀毒软件(OSCE 10.0)服务器端备份与恢复
  14. SolidWorks 部分插件不显示
  15. Python+OpenCV判断图像是黑底还是白底
  16. 用微软Custom Version识别水果:三分钟开发人工智能小应用
  17. 【java面对对象】分数类型加减乘除运算的实现
  18. Zephyr网络协议
  19. BAT批处理让文件夹里的文件单个或多个依次移动到另外一个文件夹
  20. Oracle ORA-01017: invalid username/password;解决完一个12560又来一个

热门文章

  1. mybatis扫描mapper的xml文件参数
  2. OAuth2.0在项目中认证流程介绍
  3. 数据库-优化-pt-query-digest使用简介
  4. 简单工厂 jdk源码解析
  5. dell电脑重装linux系统,重装系统出现问题,如何解决?
  6. Oracle 高水位问题
  7. iOS SAX解析XML
  8. HMAC-SHA1加密
  9. angularjs-数据同步时机ng-model-options
  10. 如何使用spring配合mybatis配置多个数据源并应用?