« 武汉 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出来 特点是挺省事,谁都会用。

执行码: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)
手生
|