Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]讨论:在客户端显示服务器计算机时间,使用哪种模式好?

韩志  发表于:2012-07-05 08:23:53  
复制

讨论:在客户端显示服务器计算机时间,使用哪种模式好?
1.使用timer事件,每个一秒从服务器获取一次当前时间并显示在客户端界面上。
2.界面打开时获取服务器当前时间,使用timer事件每隔一秒在原服务器时间上加1秒,并显示在客户端。
3.界面打开时获取服务器当前时间和客户端当前时间,并计算出时间差N,使用timer事件每隔一秒在客户端当前时间上加N,并显示在客户端。

 

Top
浪淘沙 发表于:2012-07-05 10:33:25

每一秒获取服务器时间网络负载比较大,也不稳定,如果网络中断,系统可能会僵死,所以个人观点方法1不理想。方法2,3原理差不多。还有一个方法是客户端电脑隔一段时间扫描服务器时间,如果不一致,就将本机时间修改为服务器时间,这样会有漏洞,客户端在扫描间隔可以修改时间录入非法数据。



韩志 发表于:2012-07-05 10:58:43

终于找到知己了,能看到我的难处。

兄台认为哪种方法比较稳健。修改本地电脑的时间的方法我程序一开始运行的时候就有,但是有个别用户会在程序运行后修改本机时间。

以上三种方法兄台分析的非常中肯。但没有一个是完美的,我目前的想法是把方法1和方法2结合使用。

先取服务器时间,再用方法2计算显示,每隔一分钟验证一次服务器时间,宁可让程序假死,也不愿出现漏洞。

唯一可喜的是,部署环境比较稳定,服务器刚配的花了三四万,10M光纤独享,用户也是光纤通过VPN连接到服务器的。

如果有更好的方法欢迎指导。



浪淘沙 发表于:2012-07-05 14:08:41

兄台客气了,再结合我自己的实施体会交流一下

如果按目前思路,方法1和2结合使用是比较折衷的办法,基本也没啥问题了。

鉴于兄台的部署环境不错,如果跳出当前思路可以在VPN的平台上采用b/c/s模式,如果客户端是提供多用户登录的,直接把客户端放在服务器上共享就可以了,这个问题就不存在了,不知道你用的VPN有没有这样的技术支持可以提供一个登录面板用命令按钮指向客户端而屏蔽掉服务器桌面。我做的一个系统就是用的硬VPN,可以在服务器上编写一个代码文本指向客户端路径,登录VPN时就可以打开登录面板点击按钮打开客户端。  如果客户端是每个用户单独定制的,就把这些客户端都放在服务器上,也按上述办法写好路径代码,登录时每个人各取所需打开自己的客户端就可以了。这样客户端采用的时间就是服务器时间,和客户机没关系,对客户机性能有求也不高,但对服务器性能要求比较高,所有的运算都在服务器上完成后将窗体画面传给客户机。

这样既避免了时间漏洞,也简化了以后的升级维护,还可以方便远程管理,也是一举多得的方案,我的实际体会VPN的远程效果要好于其他远程模式,只要注意程序不要用太大的图片做背景以免影响传输,也不要开启服务器本机的资源访问,另外缺点是多媒体方案不能支持,比如拍照,音乐等(可以在局域内用C/S模式,外网用VPN)。

目前用友ERP用的也是这种模式,人机交互体验也不错。



zch 发表于:2012-07-16 13:35:09

对于楼主的问题,我觉得你主要的问题是怕客户端修改时间后录入非法资料,解决该办法不一定要修改客户端时间。只要在修改资料保存的时候比较录入的资料时间和服务器时间就可以了。



菜鸟先飞 发表于:2012-08-09 08:21:32
个人意见,在登录界面或者主要关键窗体,打开的时候取当前客户端电脑时间,匹配服务器时间,如果时间一样打开登录不行给予提示(当然如果网络延迟或者取数到服务器,相差个1-2秒合理范围,如果要精确到秒就不行了),如果不一样提示修改直接取服务器时间,一般觉得要控制时间,用于锁定数据或者排号用的多,在乎的是用户电脑是不是主板电池没电或者用户自己不小心更改软件造成的时间不对,影响录入时间

菜鸟先飞 发表于:2012-08-09 08:29:26

不知道你的服务器是装什么系统,我这说装windows 2003 server,直接在服务器上面设置不同登录账户,在账户设置那 直接设置登录时候打开的窗体登录界面,所有用户登录不管是内网还说外网VPN进来只要能远程访问服务器的输入你给的用户名和密码就能打开你的程序他们直接使用,程序退出远程中断,VPN设置如果外面访问直接给开放外网端口就OK或者用VPN客户端登录



菜鸟先飞 发表于:2012-08-09 08:36:23
设置成这样服务器开启远程就OK

dbaseIIIer 发表于:2012-08-11 17:53:10

解决方案中

一、首先你要获取服务器时间

    有 iis 或者 apache 服务在运行的话,就最好了,直接用 xmlhttp 控件打开一个 http://remote_host/time.asp 或者  http://remote_host/time.php 就行了。

   

    如果有  sql 服务器的话也简单 select convert(varchar,getdate(),120) 就可以了!

 

   都没有的话,就建议 vb6 做个 的 socket 服务,拖进一个 socket 控件,或者 webserver 控件,就比较方便;

 

二、程式执行就获取 服务器时间,和 本机系统时间  把 时间差=服务器时间-本机系统时间

 

    diffs=datediff("s", serverTime, localTime)

 

    然后你在任何一个需要显示服务器时间的地方都是 dateadd("s", diffs, now())

 

 

注意:以上的处理都是假设你的服务器 不是很远,获取的时间这个动作的时间 是可以忽略的。

 

如果你是获取互联网服务器的时间的话,最好加上 获取时间 的 时间差,用 ping 来测试平均 获取数据的 延时。

一般在 100ms 以下的话,我们都会忽略的;

但是服务器会因为忙碌而反应迟缓的话,可能300-500ms 的话,你所有的客户端的时间都会错误的! 注意!



总记录:8篇  页次:1/1 9 1 :