我在服务端弄了个计时(也就是从1到75秒,然后又重头反复循环),我现在是想如何让客户端能和服务端的计时同步该如何做呢?麻烦给个思路,谢谢!

解决方案 »

  1.   

    to sz_haitao
    如果是取服务器的时间哪如何重复的取75秒呢?也就是说到了75秒又自动重1开始计算,麻烦告知谢谢
      

  2.   

    弄个timer每隔75秒的时候初始化一次
      

  3.   

    to hongqi162
    呵,关键是客户端要和服务端的计时同步呀,如果各自加各自的那如何同步呢?麻烦告知谢谢!
      

  4.   

    如果你的同步精度要求不是非常精确的话(比如精确到10毫秒或者以下),这个过程由于精度不高,所以数据传输时间可以忽略不计,那么可以这样做:
    方法1:在服务器端建立一个UDP广播网络,每隔一段时间(比如1秒)将计时值广播到整个局域网
           在客户端建立一个UDP监听服务,接收计时广播并处理
      方法1的精度应该可以达到几十个毫秒吧(呵呵,我自己认为,并无验证)方法2:服务器与客户机的时钟对时(可以手动对时,也可以使用通讯的方法定期对时,也可以和标准时间对时),循环计时过程如下
      a.读取本地当前时间并记作BeginTime
      b.读取本地当前时间并记作CurrTime
      c.使用SecondsBetween函数计算当前时间与起始时间的差值(单位为秒),并显示
      d.使用定时器循环步骤b和步骤c,如果时间差值超过75,则重新从步骤a开始
      
      方法2的精度应该更低,并且与对时的精度有关,但是应该可以控制在10秒左右吧,呵呵
      

  5.   

    to wooden954,sz_haitao
    我是要做一个抽奖程序,也就是一个服务端和多个客户端组成,也就是由服务端计时从1到75秒的时间是有客户端来选中抽奖号码?到了75秒服务端就开奖了,客户端就不能再选号码了,开完奖后又重新计时,所以客户端和服务端的时间误差不能超过一秒,否则服务端开奖了客户端还能抽那开出的奖项就不对了,麻烦各位再帮想想有什么更好的方法,小弟谢谢了
      

  6.   

    to sz_haitao
    难道然让服务端每隔一秒写入数据库时间,然后让客户端每秒读一次,我现在就是这么做的,但运行久了数据库就会报错,是不是读取数据库太频繁了!
      

  7.   

    to sz_haitao
    但要让客户端知道时间呀,也就是说必须让客户知道当前服务端所计算的时间,并不是只查询几秒钟呀,必须时时计时,该如何实现呢?
      

  8.   

    通过tcp发查询指令

    通过一个公共的内容:一个共享文件或一个记录里的一个字段(服务器写,客户端读)
      

  9.   

    如果 服务端 和 数据库 的时间是一致的
    客户端每次只要查询sql: select getdate() as fdt 就行了,服务端 不用另外写 数据库
      

  10.   

    to sz_haitao
    如果是用select getdate() as fdt 的话那如何计算75秒的时间呢?还有因为开奖需要大概十五秒左右,也就是说当时间计算到75秒的时候服务端和客户端大概要等15秒左右才能再从1开始计算,具体的如何实现呢?麻烦告知谢谢
      

  11.   

    服务器只在开始计时时,把当前时间写到数据库
    客户端取这个时间值和不断取的getdate()比较,就知道服务器的状态了
      

  12.   

    呵呵,各位大哥们还是麻烦帮小弟想想用什么办法比较优化,最重要的是运行久了不会报错!我主要是满足以下两条功能即可1.客户端的计数要和服务端的计数要一致
    2.是从1 到 75秒反复循环
    3.每当服务端运行到75秒的时候会有15秒的开奖时间,也就是说在运行15秒开奖后再从1开始计时。
    最后顺便问一下我用的是简化绿色版的SQL server,会不会是用了这种绿色版的sql运行久了才会报错呀!
      

  13.   

    客户端无需计数,也无需操作数据库,通过Tcp/ip发送消息即可。由服务端向客户端广播开始计数、停止计数的消息即可。客户端是有只有受到消息才能开始、停止抽奖,而服务器端只有客户端返回的消息才认可客户端的抽奖情况。这和网络按时计费软件的设计思路有相似之处,客户端登陆以后向服务器注册自己,设置心跳线程,按设置频率发送心跳信息,如果没有心跳信息就认为客户端断掉了。