并不是完全失败,但没找到一个通用的办法,这个通用指的不能通用所有的时间服务器,而不是说操作系统。

网上的方案很多,有用Socket类、或TcpClient类(C#)、或UdpClient类,端口有使用13的、或37、或123或更多。时间服务器列表就更多了。

但我实现测试过,多种组合后,总是不通用,可能端口13会可以,但换台服务器就要123,而且取时总是不稳定,这次取到,下次就停掉不给数据了,我分析这可能是网站为避免攻击而做的限制。

但有个很是羡慕的事情,是俺的Window7,每次都能成功取时,点多次也成功,而且更换时间服务器列表也没关系。

于是在查找了更多文档,还是没查到一种通用的办法,想到是否会有一个API的方法,结果没有,想来更新时间从Inet还是略新的功能,以前XP好象没有,MS没有来得及封装它。在最后,终于找到一个“底层”的方法,用命令行,^_^!!  W32tm.exe 。可行在程序里运行(加不显示窗口参数):w32tm /resync /nowait

怎么能知道系统更新了时间没有,不用看右下角,可以在程序写一行:

Microsoft.Win32.SystemEvents.TimeChanged += (sender, e) => ShowInfo("system time changed, now: {0}", DateTime.Now);

这样做不论是手点右下角更新的,还是另外程序更新,程序里都会有显示,这样就放心啦。具体这个命令使用哪个服务器更新,并没有显示,经过我的测试发现它是使用手动更新调整时间服务器器列表的首项,所以可以用手工先更新一下,以后就不用动了。

再注意: nowait 控制参数,会使得更新延后,使用以上事件监控,我发现我这有5秒之多,当然系统会自动计算网络耗时的,不多说了。

再注意:调用其的App要有Admin权限,否则会报错,怎么把程序加盾图标不用说了吧。

我想这种看上去容易的问题,花了我一上午时间去找,哪位兄弟如果知道Windows哪个API可用,或是有标准的时间通讯协议(socket),请告诉我。

相关的文档:

How the Windows Time Service Works

A list of the Simple Network Time Protocol (SNTP) time servers that are available on the Internet

How do I use pool.ntp.org?

C#获取Internet服务器的时间 (这篇不错,端口是123的,但也是不能通用)

用程序获取 Internet 时间 无通用性程序后的暂用办法的更多相关文章

  1. c# 遍历所有安装程序 获取所有已经安装的程序

    /// <summary> /// 获取所有已经安装的程序 /// </summary> /// <param name="reg"></ ...

  2. 微信小程序——获取当天的前一个月至后一个月

    看标题也不知道你有没有明白我想表达的意思,先上个动态图吧~ 需要分析: 1.获取当前日期的前一个月,后一个月和当月.比如说现在是7月5号,我需要得到6月5号至8月5号的日期,同时还要返回当前的星期. ...

  3. 自定义android程序一段时间无操作后的功能

    项目中遇见一个这样的需求,就是当软件在一定时间没有操作时候需要弹出广告页面,当点击广告页面时又进行软件操作,也就是广告要在软件打开并且处于未操作状态才会出来. 方法一:用handler+onTouch ...

  4. mysql获取当前时间,前一天,后一天

    负责的项目中,使用的是mysql数据库,页面上要显示当天所注册人数的数量,获取当前的年月日,我使用的是 CURDATE(), 错误的sql语句 eg:SELECT COUNT(*) FROM USER ...

  5. llinux获取系统时间

    linux中获取当前时间.统计程序运行时间,可以使用gettimeofday()得到毫秒级的时间统计,利用rdtsc指令获取纳秒级时间统计. gettimeofday() 它是一个linux C库函数 ...

  6. c# Internet时间服务器同步

    2009-02-02 17:48 8226人阅读 评论(2) 收藏 举报 服务器internetc#socketstringwindows 需要用到的名空间 using System.Net; usi ...

  7. VC++ 获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法

    1.使用CTime类(获取系统当前时间,精确到秒) CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime();//获取系统日期 str=tm ...

  8. 【VS开发】VC++ 获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法

    1.使用CTime类(获取系统当前时间,精确到秒) CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime();//获取系统日期 str=tm ...

  9. 微信小程序获取当前时间戳、获取当前时间、时间戳加减

    //获取当前时间戳 var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; console.log("当前 ...

随机推荐

  1. B2C电子商务基础系统架构解析(转载)

    系统的开发与演化,前台严格follow消费者的购买流程,后台则盯牢订单流转,牢牢抓住这两条主线,才能高屋建瓴的看清B2C的逻辑链和数据流,更深刻的规划功能模块,从而更有效支撑实际业务的流转. 前台 前 ...

  2. xtrabackup: error: last checkpoint LSN (3409281307) is larger than last copied LSN (3409274368)

    1.错误发生场景:使用2.4.1版本的xtrabackup工具进行全备,备份日志中报出此错误2.知识要点:MySQL中,redo 日志写进程会在三种条件下被触发从log buffer中写日志到redo ...

  3. shell 简单的比大小脚本

    #!/bin/bash echo "第一个数字" read a echo "第二个数字" read b if [ $a -gt $b ] then echo & ...

  4. 探索javascript----滚轮事件的兼容

    具体使用时,我们还要判断浏览器,记得传入的是兼容事件:var e=window.event||ev; 选择事件:

  5. AFNetworking3.0使用

    AFHTTPSessionManager: 根据这个对象可以对请求千设置一些参数和状态 //得到一个session manager AFHTTPSessionManager *manager = [A ...

  6. android 网络请求库的比较

    源码请戳 一. 现有库和选择的库 HttpURLConnection:是Java中的标准类,是对Java中socket的封装. Httpclient:是Apache的开源框架,是对HttpURLCon ...

  7. jquery判断div是否隐藏实例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 2016-08-05(1) ng-options的用法详解

    http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/ng-options-usage/

  9. 【LeetCode OJ】Recover Binary Search Tree

    Problem Link: https://oj.leetcode.com/problems/recover-binary-search-tree/ We know that the inorder ...

  10. Android自定义权限和使用权限

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 自定义权限,主要用于保护被赋予权限的组件.如无权限与有权限,正如public与private的对类保 ...