用winsock为什么不行呢?这个方法几乎是最好的了.

解决方案 »

  1.   

    如果真的要用winsock,该从哪入手?
    不过我现在觉得winsock方法不是最好的.
    也可能是我对winsock不是很熟!
    在服务器上得到客户机的ip地址,怎么样才能自动得到客户机的ip地址?
    客户机如何自动得到服务器的ip地址开始侦听?
      

  2.   

    不过除了winsock之外有什么更好的方法?
    现在同类的程序在这方面都是怎么实现的?
      

  3.   

    你可以在客户机启动的时候发一个消息到服务器,这样服务器就可以得到客户机的IP
    服务器的IP只好你自己指定了
      

  4.   

    其实我觉得不必要一定用客户端侦听的方法。
    你可以用服务器来传消息。你在服务器上做一个程序,专门用来监视数据库并收发消息。 客户端程序启动时,发送本地IP地址到服务器上注册,关闭时再到服务器上去注销 。 服务器上用TIMER  或其他方法检测到数据库的变化时, 就发消息到各工作站,各工作站收到消息后转去相应的处理过程。工作站中需要能保存服务器的IP地址,做为配置文件保存下来,每次程序启动时自动注册。用WINSOCK 可以,当然有其他更好的通信控件也可以。用上面的方法,工作站不需要有timer , 只在服务器上有一个,相信速度会快很多。
      

  5.   

    如果真需要如此及时的更新,恐怕就算实现了,也要付出巨大的代价。不仅是服务器,而且客户端也是。试试服务端,客户端数据库同步。看看是否适合你的程序。我在http://www.wzjcw.net/vbgood/ 看到过有关数据库同步的文章!
      

  6.   

    我觉得icevi(按钮工厂)的做法不错。
    我刚写了一个类似的程序,我用的全是winsock,客户端登录时通过winsock与服务端建立连接,并通过发送简单命令字串给服务端来完成各项数据库操作。
    不知道你的这个数据库是否有其他程序可以修改,如果是那样,那么直接用timer是最快的;
    如果所有的数据库更新都要通过你的服务端在操作,那么可以在执行完数据库操作后,由服务端向
    各登录客户端发送数据更新消息。
      

  7.   

    你可以考虑在数据库中使用触发器,当数据发生变化的时候,在触发器中使用sp_OACreate等访问服务器上的OLE 对象(传递发生变化的纪录的ID),服务器上的OLE 对象使用Winsock发送发生变化的纪录的ID到所有的客户端程序,客户端程序搜索数据库显示所有的变化的纪录。
      

  8.   

    数据库需要x台客户机的访问(1<x<最大数),现在的问题就是在服务器端不能驻留任何形式的后台程序,我想能不能在客户端程序不扫描服务器数据库,用sql server的存储过程或者是触发器自动返回改变的值?
    hydnoahark(诺亚方舟)的方法好像不错,让我测试测试!
    请大家说说还有什么好的方法?最好是不用winsock发送纪录的!
    因为我觉得在客户端多的时候用winsock一次一次的发不一定就比Timer快.
      

  9.   

    在sql_server中判断连接机制,若有连接则在连接数上加1.
      

  10.   

    如果只是为了减少数据的传输量
    建议你在数据库中做一个只有一个字段,一条记录的表,这条记录的内容是最新更新的时间(用触发器更新该记录)
    你的Timer读纪录的时候,先读这个纪录,并记录下来,每次读的时间更上次读的时间比较,如果时间更新了,就说明需要显示的数据更新了,再去读要显示的数据,那就可以降低系统资源了
      

  11.   

    to ozw(沧浪客)
    我现在用的就是这个算法!就是这个算法速度还是慢!主要是网络流量不够快!
    毕竟主要原因还是一秒钟执行一次存储过程受不了呀!