windows 下c++ 获取NTP服务器网络时间
以下代码为采用c++通过sockt udp 编程获取NTP服务器的网络时间:
.h文件代码
#include <winsock2.h>
#include <ws2tcpip.h>
#include<ctime>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#pragma comment (lib,"Ws2_32.lib")
struct NTPPacket
{union{struct _ControlWord{unsigned int uLI : 2; // 00 = no leap, clock ok unsigned int uVersion : 3; // version 3 or version 4unsigned int uMode : 3; // 3 for client, 4 for server, etc.unsigned int uStratum : 8; // 0 is unspecified, 1 for primary reference system,// 2 for next level, etc.int nPoll : 8; // seconds as the nearest power of 2int nPrecision : 8; // seconds to the nearest power of 2};int nControlWord; // 4};int nRootDelay; // 4int nRootDispersion; // 4int nReferenceIdentifier; // 4__int64 n64ReferenceTimestamp; // 8__int64 n64OriginateTimestamp; // 8__int64 n64ReceiveTimestamp; // 8int nTransmitTimestampSeconds; // 4int nTransmitTimestampFractions; // 4
};
.c文件代码主要是一个函数的实现:
#include"XXXX.h"//包含上面的头文件,文件名自取
int Get_time_t(time_t & ttime)
{ttime = 0;WSADATA wsaData;// Initialize Winsockint iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);if (iResult != 0) return 0;int result, count;int sockfd=0, rc;sockfd=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (sockfd < 0) return 0;fd_set pending_data;timeval block_time;NTPPacket ntpSend = { 0 };ntpSend.nControlWord = 0x1B;NTPPacket ntpRecv;SOCKADDR_IN addr_server;addr_server.sin_family = AF_INET;addr_server.sin_port = htons(123);//NTP服务默认为123端口号addr_server.sin_addr.S_un.S_addr = inet_addr("120.25.115.20"); //该地址为阿里云NTP服务器的公网地址,其他NTP服务器地址可自行百度搜索。SOCKADDR_IN sock;int len = sizeof(sock);if ((result = sendto(sockfd, (const char*)&ntpSend, sizeof(NTPPacket), 0,(SOCKADDR *)&addr_server, sizeof(SOCKADDR))) < 0){int err = WSAGetLastError();return 0;} FD_ZERO(&pending_data);FD_SET(sockfd, &pending_data);//timeout 10 secblock_time.tv_sec = 10;block_time.tv_usec = 0;if (select(sockfd + 1, &pending_data, NULL, NULL, &block_time) > 0){//获取的时间为1900年1月1日到现在的秒数if ((count = recvfrom(sockfd, (char*)&ntpRecv, sizeof(NTPPacket), 0, (SOCKADDR*)&sock, &len)) > 0)ttime = ntohl(ntpRecv.nTransmitTimestampSeconds) - JAN_1970;}closesocket(sockfd);WSACleanup();return 1;
}
int main(){//获取到的t为一个时间戳,请根据需求转换成可视化时间time_t t;Get_time_t(t);printf("time is %ld",t);return 0;
}
windows 下c++ 获取NTP服务器网络时间相关推荐
- win7系统ntp时间服务器,win7与内部ntp服务器同步时间出来错误【NTP时间同步服务器】...
试试编辑略,运行"gpedit.msc",依次展开"计算机"-"管理模版"-"系-"Windows 时间服务" ...
- ntp如何确认与服务器偏差_怎么测试linux下搭建的ntp服务器
展开全部 三.什么是NTP 为了实现时间同步,我们就需要用户NTP(Network Time Protocol)这个协议32313133353236313431303231363533e78988e6 ...
- 常用的linux远程管理方法,常用windows下远程管理Linux服务器的方法
常用windows下远程管理Linux服务器的方法 来源:互联网 作者:佚名 时间:2013-04-14 12:48 随着互联网的高速发展以及Linux企业应用的成熟,Linux被广泛应用于服务器领域 ...
- linux系统指定ntp服务器,Linux系统下如何使用NTP服务器?
Linux系统下的NTP服务器指的是网络时间同步协议,其作用就是同步网络时间和Linux系统中的时间,使得Linux时间更加精确.下面就来介绍一下Linux系统下如何使用NTP服务器. 一.ntp配置 ...
- Windows 下使用 SNMP 来管理网络
本文介绍了 SNMP 协议 的基本概念,SNMP 的作用,以及如何在 Windows 下使用 SNMP 来管理网络中的设备. SNMP 的介绍 SNMP(Simple Network Manageme ...
- windows下的免费邮件服务器软件hMailServer
公司购买了企业邮局给员工提供邮件服务,这样收发外部邮件都没有问题,但有个非常不好的地方,绝大多数邮件都是在内部互相之间转发的 ,结果就导致一个问题,不管这个邮件是不是发给内部的, 邮件都得到外部邮件服 ...
- Linux强制与NTP服务器同步时间
Redhat 7: 先停止ntp服务,然后强制与NTP服务器的时间同步,完成后再启动ntp服务. # systemctl stop ntpd # ntpdate ntp-server-ip (如果想不 ...
- WEB相关:Windows下打造完美的服务器平台
Windows下打造完美的服务器平台(APACHE+JSP+CGI+PHP+ASP+MYSQL) 需要下载几个软件包: 1. php-5.0.2-Win32 2. apache_2.0.52-win3 ...
- Windows下快速获取一个文件夹下所有文件的名称列表
Windows下快速获取一个文件夹下所有文件的名称列表 进入windows终端:win+R 输入cmd,回车 使用cd命令进入到目标文件夹.例如: 先进入D盘,输入d: 回车, 然后 cd openc ...
最新文章
- mysql 导入导出 优化_mysql数据导入导出与数据表优化
- 以太坊Oracle系列二:My Oracle
- R语言心得-分词包的安装
- python异常处理操作语句_异常处理语句(2)
- mysql 替代like_mysql用instr替代like查询
- Centos7常用命令[挂载文件系统]
- html动态绑定树形菜单,jQuery ztree实现动态树形多选菜单
- android 对象输出到文件
- 北大核刊最新版2020目录_重磅!最新版CSSCI 来源期刊目录(2019-2020)
- matlab 文本分类,中文文本分类语料库-TanCorpV1.0
- 罗永浩“卖艺”还债:所有命运馈赠的礼物,都早已在暗中标好了价格
- 自定义linux桌面,教您6个自定义Ubuntu桌面的步骤
- 数据挖掘考前30分钟必看(2.0版本)
- 老男孩MySqI DBA周末班(三期)
- 读书的意义—献给第19个世界读书日
- 如何解决打开keil工程软件闪退问题
- Supermap iClient 展示与空间数据绑定的图片
- R7 5800H 3060 ubuntu20 配置全纪录(一)主要包括:N卡驱动、网卡驱动、virtualenv、CUDA and pytorch
- 计算机网络与网络管理 基础知识
- Bootstrap教程简介
热门文章
- HDU 4013 Distinct Subtrees(树同构)
- 从世界杯观赛看,“移动视频”就是个伪命题
- 用Flutter手撸一个抖音国际版 看看有多炫
- linux 卸载软件不卸载依赖
- win10计算机命名规则,Win10,颠覆Windows命名规则
- 反应式编程之flux concatmap
- kali linux设置静态ip
- clinux 防火墙增加白名单_linux防火墙白名单设置方法
- 树莓派python手势识别控制_Raspberry Pi和手势传感器控制LED
- win7下面运行软件崩溃的问题:CLR20r3 system.io.fileloadexception