用程序获取 Internet 时间 无通用性程序后的暂用办法
并不是完全失败,但没找到一个通用的办法,这个通用指的不能通用所有的时间服务器,而不是说操作系统。
网上的方案很多,有用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
C#获取Internet服务器的时间 (这篇不错,端口是123的,但也是不能通用)
用程序获取 Internet 时间 无通用性程序后的暂用办法的更多相关文章
- c# 遍历所有安装程序 获取所有已经安装的程序
/// <summary> /// 获取所有已经安装的程序 /// </summary> /// <param name="reg"></ ...
- 微信小程序——获取当天的前一个月至后一个月
看标题也不知道你有没有明白我想表达的意思,先上个动态图吧~ 需要分析: 1.获取当前日期的前一个月,后一个月和当月.比如说现在是7月5号,我需要得到6月5号至8月5号的日期,同时还要返回当前的星期. ...
- 自定义android程序一段时间无操作后的功能
项目中遇见一个这样的需求,就是当软件在一定时间没有操作时候需要弹出广告页面,当点击广告页面时又进行软件操作,也就是广告要在软件打开并且处于未操作状态才会出来. 方法一:用handler+onTouch ...
- mysql获取当前时间,前一天,后一天
负责的项目中,使用的是mysql数据库,页面上要显示当天所注册人数的数量,获取当前的年月日,我使用的是 CURDATE(), 错误的sql语句 eg:SELECT COUNT(*) FROM USER ...
- llinux获取系统时间
linux中获取当前时间.统计程序运行时间,可以使用gettimeofday()得到毫秒级的时间统计,利用rdtsc指令获取纳秒级时间统计. gettimeofday() 它是一个linux C库函数 ...
- c# Internet时间服务器同步
2009-02-02 17:48 8226人阅读 评论(2) 收藏 举报 服务器internetc#socketstringwindows 需要用到的名空间 using System.Net; usi ...
- VC++ 获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法
1.使用CTime类(获取系统当前时间,精确到秒) CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime();//获取系统日期 str=tm ...
- 【VS开发】VC++ 获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法
1.使用CTime类(获取系统当前时间,精确到秒) CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime();//获取系统日期 str=tm ...
- 微信小程序获取当前时间戳、获取当前时间、时间戳加减
//获取当前时间戳 var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; console.log("当前 ...
随机推荐
- 2016年Q2《网络安全创新500强》榜单解读
近日,美国投资咨询机构Cybersecurity Ventures发布了2016 Q2<网络安全创新500强>企业榜单,新兴安全公司root9B异军突起,国内4家企业上榜. 关于Cyber ...
- valueForKeyPath常用用法
valueForKeyPath和valueForKey有一些类似,但也有一些不同的地方.这里就简单说一下valueForKeyPath一些不同的地方. 举例来说: 1.valueForKeyPath可 ...
- 'Check Android SDK'has encountered a problem.An internal error during:"Check Android SDK".
在android项目下的layout目录下创建一个xml文件finish之后,报此错误.虽然点ok之后,不影响使用. 解决方案: 1.把project菜单下的build automatically前面 ...
- Binary Tree Preorder Traversal -- LEETCODE 144
方法一:(迭代) class Solution { public: vector<int> preorderTraversal(TreeNode* root) { vector<in ...
- Codeforces 570C 贪心
题目:http://codeforces.com/contest/570/problem/C 题意:给你一个字符串,由‘.’和小写字母组成.把两个相邻的‘.’替换成一个‘.’,算一次变换.现在给你一些 ...
- shell脚本入门及基本元素
命令和参数 #!/bin/sh 其中#!用来告诉系统它后面的参数是用来执行该文件的程序,必须放在脚本的首行,不然会在执行脚 本 的时候报错.当一个文件开头的两个字符是#!时,内核会扫描其它的部分看是否 ...
- Linux chroot 并使用之前系统设备节点
/********************************************************************************* * Linux chroot 并使 ...
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- C++模板元编程(C++ template metaprogramming)
实验平台:Win7,VS2013 Community,GCC 4.8.3(在线版) 所谓元编程就是编写直接生成或操纵程序的程序,C++ 模板给 C++ 语言提供了元编程的能力,模板使 C++ 编程变得 ...
- Bullet核心类介绍(Bullet 2.82 HelloWorld程序及其详解,附程序代码)
实验平台:win7,VS2010 先上结果截图: 文章最后附有生成该图的程序. 1. 刚体模拟原理 Bullet作为一个物理引擎,其任务就是刚体模拟(还有可变形体模拟).刚体模拟,就是要计算预测物体的 ...