NetTime——c++实现计算机时间与网络时间的更新
《Windows网络与通信程序设计》第二章的一个小例子,网络编程入门。
- #include "stdafx.h"
- #include <WinSock2.h>
- #include <windows.h>
- #include <stdio.h>
- #include <iostream>
- #pragma comment(lib,"ws2_32.lib")
- using namespace std;
- BOOL InitSock();
- void SetTimeFromTP(ULONG ulTime);
- int main()
- {
- if (InitSock()==FALSE)
- {
- return ;
- }
- SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if(s == INVALID_SOCKET)
- {
- printf(" Failed socket() \n");
- return ;
- }
- // 填写远程地址信息,连接到时间服务器
- sockaddr_in servAddr;
- servAddr.sin_family = AF_INET;
- servAddr.sin_port = htons(); //用窗口37监听
- // 这里使用的时间服务器是129.6.15.28,更多地址请参考http://tf.nist.gov/service/its.htm
- servAddr.sin_addr.S_un.S_addr = inet_addr("129.6.15.29");
- if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -)
- {
- printf(" Failed connect() \n");
- return ;
- }
- // 等待接收时间协议返回的时间。学习了Winsock I/O模型之后,最好使用异步I/O,以便设置超时
- ULONG ulTime = ;
- int nRecv = ::recv(s, (char*)&ulTime, sizeof(ulTime), );
- if(nRecv > )
- {
- ulTime = ntohl(ulTime);
- SYSTEMTIME st;
- GetLocalTime(&st);
- printf("本地当前时间为:%d-%d-%02d %02d:%02d:%02d\r\n",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
- SetTimeFromTP(ulTime);
- printf(" 成功与时间服务器的时间同步!\n");
- system("PAUSE");
- }
- else
- {
- printf(" 时间服务器不能确定当前时间!\n");
- system("PAUSE");
- }
- closesocket(s);
- return ;
- }
- BOOL InitSock()
- {
- WSAData wsaData = {};
- if(WSAStartup(MAKEWORD(,),&wsaData)==)
- {
- return TRUE;
- }
- return FALSE;
- }
- void SetTimeFromTP(ULONG ulTime) // 根据时间协议返回的时间设置系统时间
- {
- // Windows文件时间是一个64位的值,它是从1601年1月1日中午12:00到现在的时间间隔,
- // 单位是1/1000 0000秒,即1000万分之1秒(100-nanosecond )
- FILETIME ft;
- SYSTEMTIME st;
- // 首先将基准时间(1900年1月1日0点0分0秒0毫秒)转化为Windows文件时间
- st.wYear = ;
- st.wMonth = ;
- st.wDay = ;
- st.wHour = ;
- st.wMinute = ;
- st.wSecond = ;
- st.wMilliseconds = ;
- SystemTimeToFileTime(&st, &ft);
- // 然后将Time Protocol使用的基准时间加上以及逝去的时间,即ulTime
- LONGLONG *pLLong = (LONGLONG *)&ft;
- // 注意,文件时间单位是1/1000 0000秒,即1000万分之1秒(100-nanosecond )
- *pLLong += (LONGLONG) * ulTime;
- // 再将时间转化回来,更新系统时间
- FileTimeToSystemTime(&ft, &st);
- SetSystemTime(&st);
- printf("已更新至服务器当前时间为:%d-%d-%02d %02d:%02d:%02d\r\n",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
- }
NetTime——c++实现计算机时间与网络时间的更新的更多相关文章
- Android 获取系统时间和网络时间
有些时候我们的应用中只能使用网络时间,而不能使用系统的时间,这是为了避免用户关闭了使用网络时间的功能后所产生的误差. 直接上代码. 1.清单文件中网络添加权限. <!-- 访问Internet资 ...
- [转] 设置linux时间为网络时间
[From] https://blog.csdn.net/weixin_35852328/article/details/79506453 Linux的时间分为System Clock(系统时间)和R ...
- linux系统时间与网络时间不同步
在解决问题之前,我们首先来了解下面几个知识点: 1. date命令: #date 显示系统时间 2.hwclock命令 (即hardwareclock系统硬件时间) #hwclock 显示硬件时间 ...
- Android获取网络时间的方法
一.通过免费或者收费的API接口获取 1.免费 QQ:http://cgi.im.qq.com/cgi-bin/cgi_svrtime 淘宝:http://api.m.taobao.com/rest/ ...
- Linux的本地时间和网络时间同步
Linux本地时间和网络时间不同步,更新了之后,重启还会变回去.可以通过一下方法修改并保存. 1. 安装ntpdate工具 sudo apt-get install ntpdate 2. 设置系统 ...
- Linux服务器同步网络时间
Linux服务器运行久时,系统时间就会存在一定的误差,一般情况下可以使用date命令进行时间设置,但在做数据库集群分片等操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步. ...
- Centos7 修改系统时间和硬件时间不一致的问题
查看系统时间 [root@localhost ~]# dateSat Feb 24 14:41:22 CST 2018 查看硬件时间 [root@localhost ~]# hwclock --sho ...
- Lua获取网络时间
作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di Lua获取网络时间 网络授时服务是一些网络上的时间服务器提供的时间,一般用于本地时钟同步. ...
- SYN2102型 NTP网络时间服务器
SYN2102型 NTP网络时间服务器 ntp主时钟服务器ntp时钟服务器厂商使用说明视频链接: http://www.syn029.com/h-pd-57-0_310_1_-1.html 请将 ...
随机推荐
- Android 设计模式情景分析——观察者模式
观察者模式是一种使用频率非常高的模式,有时也被称作发布/订阅模式,属于行为型模式,它最常用的是 GUI 系统.订阅——发布系统,它一个重要作用就是解耦,使得它们之间的依赖性更小.观察者模式定义了对象间 ...
- python学习笔记11 ----线程、进程、协程
进程.线程.协程的概念 进程和线程是操作系统中两个很重要的概念,对于一般的程序,可能有若干个进程,每一个进程有若干个同时执行的线程.进程是资源管理的最小单位,线程是程序执行的最小单位(线程可共享同一进 ...
- [CentOS7] 挂载iso镜像文件到/media目录下
声明:本文主要总结自:鸟哥的Linux私房菜-第七章.Linux 磁碟與檔案系統管理,如有侵权,请通知博主 首先,设置虚拟机让它加载iso镜像文件到CD/DVD设备中,这个设备对应于Linux下的/d ...
- win10外接显示器时有些应用和里面的字体显示比较模糊
打开系统设置 - 选择显示 - 选中外接的显示器 - 点击 "高级缩放设置" 进去后将 "允许 Windows 尝试修改应用,使其不模糊"打开,然后关闭应用再 ...
- 洛谷P2534 [AHOI2012]铁盘整理
P2534 [AHOI2012]铁盘整理 题目描述 输入输出格式 输入格式: 共两行.第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R.(1& ...
- 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 ...
- [题解](树形dp/记忆化搜索)luogu_P1040_加分二叉树
树形dp/记忆化搜索 首先可以看出树形dp,因为第一个问题并不需要知道子树的样子, 然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出 那么如何求最大加分树——根据中 ...
- DropDownList 不能绑定多个值错误!
ListItem item = new ListItem("--请选择--",""); ddlstPurchaser.Items.Insert(0, item) ...
- Chapter13
package scala /** * Created by EX-CHENZECHAO001 on 2018-04-04. */class Chapter13 { // 13 集合 // 所有的集合 ...
- @Import @bean,@Conditional @ConfigurationProperties @EnableConfigurationProperties 注解使用
一分钟学会spring注解之@Import注解http://blog.51cto.com/4247649/2118354 @Autowired与@Resource 注解的使用 https://www. ...