比如我有一个程序,A.EXE,用户新增一张单据保存到数据库,保存的时候,我想局域网内的正在使用A.EXE的用户都能收到通知,就类似QQ弹在桌面右下角的新闻一样,最土的方法是用TIMER循环实现,但是效果不好,我想问下,有没有谁能给我相关的例子的,对这方面的知识为0,局域网通信的,

解决方案 »

  1.   

    要有个sever.exe保持与所有a.exe的连接,用socket连接,当其中一个a.exe执行完毕后,就提交更新指令,然后,由server.exe发布更新命令,于是,所有的a.exe都能得到命令更新.我以前写了个这方面的中间件程序,但是不是用delphi写的...道理就是这样的.
      

  2.   

    若你现有的程序是c/s的,那应该只能用类似不断的查询的方式来处理了,因为数据库没有callback的功能。
    如果是n-tier的方式,则看看你的n-tier架构是否支持callback.比如最新的delphi datasnap就有callback功能,由客户端向server注册callback方法,server再回叫此方法。
      

  3.   

    想其他用户发消息,socket,或者用indy的组件都可以
      

  4.   

    是C/S的,而且不是三层的,有没有哪位大大能给个DEMO
      

  5.   

    这个可以在客户端开个线程调数据库里面一个存储过程,然后在存储过程中写个死循环,这个循环只有发现有你的新增事件才返回。这样就在不影响性能的情况下解决这个问题。当然这个循环你得加点sleep的操作,要不然数据库就响应不了别的东西
      

  6.   


    我也是想用UDP广播消息,但是不会,你能给个DEMO么,或者教教我
      

  7.   

    用IDUDPClient和IDUPDServer,网上例子也不少
      

  8.   

    可以用INDY组件
    用UDPServer的OnUDPRead事件接收,记得要开启监听
    用UDPClient.SendBuffer发送。
    UDPClient发送的目标IP,为 XXX.XXX.XXX.255就可以在网段内广播
      

  9.   

    UDP的太不靠谱,还是用TCP/IP的吧,你要是三层的就好办,把TCPServer加在你的应用服务器程序,如果你直接就是A.exe+数据库的那种,就要另外建立一个TCPServer程序,专门来广播消息,你参考Indy的Demo就可以,改下它的广播代码,加个判断,如果IP是自己就不发消息给自己,建立完连接后可以通过
    AThread.Connection.Socket.Binding.PeerIP来得到客户端的IP,广播就是这些IP的列表做循环。