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 请将 ...
随机推荐
- AndroidMainfest.xml文件解释
AndroidManifest.xml是每个android程序中必须的文件.它位于application的根目录,描述了package中的全局数据,包括了package中暴露的组件(activitie ...
- Vue 全家桶单元测试简要指南
此文已由作者张汉锐授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. vue 的单元测试环境 按照目前全家桶的情况,是需要 webpack 的支持的.可以直接使用 vue-cli ...
- [CentOS7] minimal安装后 出现 没有ifconfig 无法ping 无法yum could not retrieve mirrorlist http://mirrorlist.centos.org/
刚以minimal方式安装完CentOS,打算看下ip,结果ifconfig没找到(后来得知可以用ip addr查看本机ip) 于是yum grouplist, 结果出现could not retri ...
- 基础篇---memcache
十分钟学会memcache,比你想象的要简单 转发:https://baijiahao.baidu.com/s?id=1588816843517136163&wfr=spider&fo ...
- Xuzhou Winter Camp 1C(模拟)
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include ...
- IOS Swift UITableViewcontroller实现点击空白处隐藏键盘
在ios开发中,为了方便,我们经常使用UITableViewcontroller,比如搜索界面为了方便可能更多的使用UITableViewcontroller,那么问题就来了,当我点击搜索框的时候会弹 ...
- H5页面开发的touchmove事件
在做一屏滚动的H5页面的时候,必须移除touchmove事件,如果不移除,在安卓机上会触发微信原生的向下滚动拉出刷新.在IOS上出现上下都可以继续滑动,所以需要移除document的touchmove ...
- sweetAlert()参数配置
alertTypes = ['error', 'warning', 'info', 'success'], defaultParams = { title: '', text: '', type: n ...
- Unittest组织用例的姿势
本文我们将会讲解Python Unittest 里组织用例的5种姿势. 环境准备: python 3.0以上 python requests库 小编的环境: python 3.6.4 一.TestLo ...
- UiAutomator快速调试
步骤: 1.打开浏览器,输入网址https://github.com,搜索uiautomatorhelper 2. 3 . 4.打开eclipse,File-&g ...