用程序获取 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("当前 ...
随机推荐
- 如何让UIView中的Button点击之后跳转到另一个ViewController上去,ViewController上也有一个按钮 可以返回
第一种方法:如果使用导航第一个按钮方法:[self.navigationController pushViewController:secondVC animated:YES];第二个按钮方法:[se ...
- how a 程序猿 doubled his salary?
One thing i can say, no matter what position i was in or what was my salary, i never stopped studyin ...
- ObjC宏定义-预编译小功能
以前看来#号,好像只是预编译,原来它还可以有跟Swift中"\( )"的拼接功能 例如: #define string(x) #x 意思就是 string(x) = "x ...
- Linux代码的重用与强行卸载Linux驱动
(一)Linux代码的重用 重用=静态重用(将要重用的代码放到其他的文件的头文件中声明)+动态重用(使用另外一个Linux驱动中的资源,例如函数.变量.宏等) 1.编译是由多个文件组成的Linux驱动 ...
- JS弹窗数据带回
父窗口代码: function selectCar_Team_Info(){ //var url = "<%=basepath_%>ec/jsp/carLoading/carTe ...
- 亲身试用python简单小爬虫
前几天基友分享了一个贴吧网页,有很多漂亮的图片,想到前段时间学习的python简单爬虫,刚好可以实践一下. 以下是网上很容易搜到的一种方法: #coding=utf-8 import urllib i ...
- Java网络编程及安全
一.实验内容: 1.运行教材上TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代码,一人加密后通过TCP发送: 注:加密使用AES或者 ...
- 关于seajs模块化的搭建
搭建seajs这个鬼吧!好像必须要用服务器起.... 然后我开始弄了个nodejs服务器. 安装nodejs:在网站上下载,安装,安装.. 打开命令行,输入cdm. 输入node -v ,输出版本信息 ...
- 购物车数字加减按钮HTML+CSS+JS(有需要嫌麻烦的小伙伴拿走不谢)
之前在写详情页的时候,如下图 因为自己嫌麻烦,就去看其他网站是怎么写的,想直接拿来用,后来看来看去觉得写得很麻烦,于是最后还是决定自己写,附上HTML+CSS+JS代码,一条龙一站式贴心服务2333 ...
- Caffe 源碼閱讀(六) InternalThread
类InternalThread是一个虚类,是Caffe中的多线程接口,其本质是为封装了boost::thread 看源码可以得到以下结论: 1.每个派生类都需要实现一个InternalThreadEn ...