《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++实现计算机时间与网络时间的更新的更多相关文章

  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. Dijkstra 路径规划 C#

    示例无向图如下:(起始点为v0) 邻接矩阵为: 注意:其中没有连接的边和自己到自己的点权值用10000表示. 代码: static void Main(string[] args) { , , , , ...

  2. c#桌面应用程序--窗体重复创建问题

    重复创建窗体问题的引出 连续单击添加窗体按钮,通过普通的在按钮事件方法中创建窗体,显示窗体的后果是,我们会发现,相同的窗体会重复不断的弹出.代码如下: //添加窗口事件方法 private void ...

  3. Highest Price in Supply Chain (25)(DFS)(PAT甲级)

    #include<bits/stdc++.h>using namespace std;int fa;int degree[100007];vector<int>v[100007 ...

  4. [Xcode 实际操作]三、视图控制器-(10)在Storyboard中使用图像视图控件

    目录:[Swift]Xcode实际操作 本文将演示常用的图像视图控件在故事板中的使用. 打开故事板文件[Main.storyboard]点击选择视图控制器的根视图. 点击库图标,打开控件库面板. 在控 ...

  5. [Xcode 实际操作]四、常用控件-(14)使用UIWebView控件加载本地HTML

    目录:[Swift]Xcode实际操作 本文将演示使用网页视图,加载并渲染网页代码. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit im ...

  6. 使用shell脚本分析Nagios的status.dat文件

    前言 Nagios的安装和配置以及批量添加监控服务器在我前面的文章中已经讲的很详细了. 我们知道,Nagios的网页控制页面(一般为http://nagio.domain.com/nagios)里可以 ...

  7. /etc/hosts文件修改后如何生效

    修改/etc/hosts之后正常情况应该是保存之后立即生效的,但是有时不是.使用uname -a 可以查看hostname是多少,就可以知道是否修改生效了.如果没有这时的策略有:1) 重启机器2) 重 ...

  8. Migration-添加表(加外键)

    public partial class _222 : DbMigration { public override void Up() { //DropForeignKey("dbo.Ass ...

  9. 由Python的浅拷贝(shallow copy)和深拷贝(deep copy)引发的思考

    首先查看拷贝模块(copy)发现: >>> help(copy)Help on module copy:NAME    copy - Generic (shallow and dee ...

  10. Storm概念学习系列之storm的设计思想

    不多说,直接上干货! storm的设计思想 在 Storm 中也有对流(Stream)的抽象,流是一个不间断的.无界的连续 Tuple(Storm在建模事件流时,把流中的事件抽象为 Tuple 即元组 ...