《Windows网络与通信程序设计》第二章的一个小例子,网络编程入门。

  1. #include "stdafx.h"
  2. #include <WinSock2.h>
  3. #include <windows.h>
  4. #include <stdio.h>
  5. #include <iostream>
  6.  
  7. #pragma comment(lib,"ws2_32.lib")
  8. using namespace std;
  9.  
  10. BOOL InitSock();
  11. void SetTimeFromTP(ULONG ulTime);
  12.  
  13. int main()
  14. {
  15. if (InitSock()==FALSE)
  16. {
  17. return ;
  18. }
  19.  
  20. SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  21. if(s == INVALID_SOCKET)
  22. {
  23. printf(" Failed socket() \n");
  24. return ;
  25. }
  26.  
  27. // 填写远程地址信息,连接到时间服务器
  28. sockaddr_in servAddr;
  29. servAddr.sin_family = AF_INET;
  30. servAddr.sin_port = htons(); //用窗口37监听
  31.  
  32. // 这里使用的时间服务器是129.6.15.28,更多地址请参考http://tf.nist.gov/service/its.htm
  33. servAddr.sin_addr.S_un.S_addr = inet_addr("129.6.15.29");
  34. if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -)
  35. {
  36. printf(" Failed connect() \n");
  37. return ;
  38. }
  39.  
  40. // 等待接收时间协议返回的时间。学习了Winsock I/O模型之后,最好使用异步I/O,以便设置超时
  41.  
  42. ULONG ulTime = ;
  43. int nRecv = ::recv(s, (char*)&ulTime, sizeof(ulTime), );
  44.  
  45. if(nRecv > )
  46. {
  47. ulTime = ntohl(ulTime);
  48.  
  49. SYSTEMTIME st;
  50. GetLocalTime(&st);
  51. printf("本地当前时间为:%d-%d-%02d %02d:%02d:%02d\r\n",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
  52.  
  53. SetTimeFromTP(ulTime);
  54. printf(" 成功与时间服务器的时间同步!\n");
  55.  
  56. system("PAUSE");
  57. }
  58. else
  59. {
  60. printf(" 时间服务器不能确定当前时间!\n");
  61. system("PAUSE");
  62. }
  63.  
  64. closesocket(s);
  65. return ;
  66. }
  67.  
  68. BOOL InitSock()
  69. {
  70. WSAData wsaData = {};
  71. if(WSAStartup(MAKEWORD(,),&wsaData)==)
  72. {
  73. return TRUE;
  74. }
  75.  
  76. return FALSE;
  77. }
  78.  
  79. void SetTimeFromTP(ULONG ulTime) // 根据时间协议返回的时间设置系统时间
  80. {
  81. // Windows文件时间是一个64位的值,它是从1601年1月1日中午12:00到现在的时间间隔,
  82. // 单位是1/1000 0000秒,即1000万分之1秒(100-nanosecond )
  83. FILETIME ft;
  84. SYSTEMTIME st;
  85.  
  86. // 首先将基准时间(1900年1月1日0点0分0秒0毫秒)转化为Windows文件时间
  87. st.wYear = ;
  88. st.wMonth = ;
  89. st.wDay = ;
  90. st.wHour = ;
  91. st.wMinute = ;
  92. st.wSecond = ;
  93. st.wMilliseconds = ;
  94. SystemTimeToFileTime(&st, &ft);
  95.  
  96. // 然后将Time Protocol使用的基准时间加上以及逝去的时间,即ulTime
  97. LONGLONG *pLLong = (LONGLONG *)&ft;
  98. // 注意,文件时间单位是1/1000 0000秒,即1000万分之1秒(100-nanosecond )
  99. *pLLong += (LONGLONG) * ulTime;
  100.  
  101. // 再将时间转化回来,更新系统时间
  102. FileTimeToSystemTime(&ft, &st);
  103. SetSystemTime(&st);
  104. printf("已更新至服务器当前时间为:%d-%d-%02d %02d:%02d:%02d\r\n",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
  105.  
  106. }

NetTime——c++实现计算机时间与网络时间的更新的更多相关文章

  1. Android 获取系统时间和网络时间

    有些时候我们的应用中只能使用网络时间,而不能使用系统的时间,这是为了避免用户关闭了使用网络时间的功能后所产生的误差. 直接上代码. 1.清单文件中网络添加权限. <!-- 访问Internet资 ...

  2. [转] 设置linux时间为网络时间

    [From] https://blog.csdn.net/weixin_35852328/article/details/79506453 Linux的时间分为System Clock(系统时间)和R ...

  3. linux系统时间与网络时间不同步

    在解决问题之前,我们首先来了解下面几个知识点: 1. date命令: #date 显示系统时间 2.hwclock命令   (即hardwareclock系统硬件时间) #hwclock 显示硬件时间 ...

  4. Android获取网络时间的方法

    一.通过免费或者收费的API接口获取 1.免费 QQ:http://cgi.im.qq.com/cgi-bin/cgi_svrtime 淘宝:http://api.m.taobao.com/rest/ ...

  5. Linux的本地时间和网络时间同步

    Linux本地时间和网络时间不同步,更新了之后,重启还会变回去.可以通过一下方法修改并保存. 1.  安装ntpdate工具 sudo apt-get install ntpdate 2.  设置系统 ...

  6. Linux服务器同步网络时间

    Linux服务器运行久时,系统时间就会存在一定的误差,一般情况下可以使用date命令进行时间设置,但在做数据库集群分片等操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步. ...

  7. Centos7 修改系统时间和硬件时间不一致的问题

    查看系统时间 [root@localhost ~]# dateSat Feb 24 14:41:22 CST 2018 查看硬件时间 [root@localhost ~]# hwclock --sho ...

  8. Lua获取网络时间

    作者:ani_di  版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di Lua获取网络时间 网络授时服务是一些网络上的时间服务器提供的时间,一般用于本地时钟同步. ...

  9. SYN2102型 NTP网络时间服务器

    SYN2102型  NTP网络时间服务器   ntp主时钟服务器ntp时钟服务器厂商使用说明视频链接: http://www.syn029.com/h-pd-57-0_310_1_-1.html 请将 ...

随机推荐

  1. Android 设计模式情景分析——观察者模式

    观察者模式是一种使用频率非常高的模式,有时也被称作发布/订阅模式,属于行为型模式,它最常用的是 GUI 系统.订阅——发布系统,它一个重要作用就是解耦,使得它们之间的依赖性更小.观察者模式定义了对象间 ...

  2. python学习笔记11 ----线程、进程、协程

    进程.线程.协程的概念 进程和线程是操作系统中两个很重要的概念,对于一般的程序,可能有若干个进程,每一个进程有若干个同时执行的线程.进程是资源管理的最小单位,线程是程序执行的最小单位(线程可共享同一进 ...

  3. [CentOS7] 挂载iso镜像文件到/media目录下

    声明:本文主要总结自:鸟哥的Linux私房菜-第七章.Linux 磁碟與檔案系統管理,如有侵权,请通知博主 首先,设置虚拟机让它加载iso镜像文件到CD/DVD设备中,这个设备对应于Linux下的/d ...

  4. win10外接显示器时有些应用和里面的字体显示比较模糊

    打开系统设置 - 选择显示 - 选中外接的显示器 - 点击 "高级缩放设置" 进去后将 "允许 Windows  尝试修改应用,使其不模糊"打开,然后关闭应用再 ...

  5. 洛谷P2534 [AHOI2012]铁盘整理

    P2534 [AHOI2012]铁盘整理 题目描述 输入输出格式 输入格式: 共两行.第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R.(1& ...

  6. B.Grid with Arrows-The 2019 ICPC China Shaanxi Provincial Programming Contest

    BaoBao has just found a grid with $n$ rows and $m$ columns in his left pocket, where the cell in the ...

  7. [题解](树形dp/记忆化搜索)luogu_P1040_加分二叉树

    树形dp/记忆化搜索 首先可以看出树形dp,因为第一个问题并不需要知道子树的样子, 然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出 那么如何求最大加分树——根据中 ...

  8. DropDownList 不能绑定多个值错误!

    ListItem item = new ListItem("--请选择--",""); ddlstPurchaser.Items.Insert(0, item) ...

  9. Chapter13

    package scala /** * Created by EX-CHENZECHAO001 on 2018-04-04. */class Chapter13 { // 13 集合 // 所有的集合 ...

  10. @Import @bean,@Conditional @ConfigurationProperties @EnableConfigurationProperties 注解使用

    一分钟学会spring注解之@Import注解http://blog.51cto.com/4247649/2118354 @Autowired与@Resource 注解的使用 https://www. ...