« 武汉 WUHAN·CHINA (2) | 打工与创业 »

互联网时间同步工具

bruce | 二月 25,2005 03:16

服务器/客户端
使用BCB6的组件,几个小时内摸爬滚打写出来的。还比较健壮、好用

手生了,写程序真是累,啥都要翻帮助。


作用:使用时间同步协议Time Protocol, (RFC 868)
做机器间系统时间同步
想想100台破联想机器不间断工作,要保证时间同步还真难
先是写死在应用系统中,后来发现有些问题,但不敢随便改代码,只能另外想办法。
又找不到合适的解决方案
年前从NTP折腾起,实在是难得折腾,我只是想同步一下日期时间,不许要那么精确。
这两天用户催得紧,我就被迫加紧时间找方案
初衷是健壮、开发快、使用方便
先想到开服务,自动定制执行 cmd /t net time \server /set /yes >log.txt
后来发现一是错误消息不显示
二是权限要求高,又要开guest匿名权限,又要开共享什么的,实在是担心
不成,早上开始使用socket自己实现
基本估算Time = ServerTime +(ClientTime2-ClientTIme1)/2
但发现写服务程序socket效率太低下,健壮性无法短时间内保障,从MFC改到BCB5
想偷懒使用clientSocket,结果发现异常窗口无法捕获,吐血。
晚上被介绍indy组件,于是装bcb6,好家伙,现成的时间协议实现。
client/server都有,于是选用了合适的组件,快速完成代码。
总算是在短时间内完成了不需要怎么调试的工具,日后可以用到很多地方。

有时间还是升级为先进一点的NTP吧。

配置文件,看ini说明
既是服务器也是客户端,根据设置。


估计有人用得到,share出来
特点是挺省事,谁都会用。

sametime.gif, 16 KB

执行码:http://www.oldsoft.com/mysoft/2005.02.24.Sametime/time.5.2.24.rar

源码:http://www.oldsoft.com/mysoft/2005.02.24.Sametime/time.5.2.24.src.rar


有些小错误 [回复]

AnsiString的UpperCase的定义:
AnsiString __fastcall UpperCase() const;
注意他不修改字符串本身,而是返回一个大写的字符串。
autoserver.UpperCase(); -> autoserver = autoserver.UpperCase();
...

最好是使用
autoserver.AnsiCompareIC("YES") == 0
这种方法来判断,或者直接使用Ini的ReadBool来处理(0,1)

Wei Shijun | 2005-02-25, 15:11

低级错误啊 [回复]

手生

bruce\ | 2005-02-26, 22:37