现在客户要求,在局域网内任何一台电脑上进行向局域网内其它在线的ERP客户端发布一个信息。这种效果如何实现呢?

解决方案 »

  1.   

    用indy控件,TIdUDPClient,TIdUDPServer,两个port属性设置成一个值,TIdUDPClient的host属性设置成'255.255.255.255',在TIdUDPServer的OnUDPRead中添加接受数据的代码,你添加这个事件之后可能会提示TIdSocketHandle和TBytes找不到,你在uses里面加入IdSocketHandle,另外定义一个TBytes = array of Byte;可解决这个问题,这个是Indy的一个bug。之后调用TIdUDPClient的Broadcast函数,格式如下Broadcast(你要发送的内容,端口)这个端口号设置的值要跟TIdUDPServer的Port属性的值一样。
    这样就完事儿了,简单吧!
      

  2.   

    通过indy10来做比较方便一些。
    一些步骤:
    1、数据库用户表中建立一个存放IP的字段、一个状态字段
    2、建立一个存放不在线时保存的消息内容---以便登录时自动显示
    3、建立一个存放即时对话内容的表          --以备查
    **2、3也可以放在一个表中
    4、把消息内容分类,哪些用户需要接收哪种消息,实际情况不是所有用户都需要接收消息
          分类后,在用户表中增加这些字段,以便设置消息接收权限。
    5、用户登录时把登录的那台电脑的IP记录在表中
    6、建立一个消息代理,专门用来接收和发送消息,这个消息代理随ERP运行自动运行。
    7、定义一个消息记录类型,用来记录消息的发送者、消息详情等信息,根据实际需要定义。
    8、ERP各需要发送消息的模块,通过向代理发送消息,由代理自动处理消息,
         如果用户不在线,在保存到表  中。实时对话也记录到表中,按实际需要进行备份和清理这些记录。
    9、当前用户的ERP退出时,发消息给消息代理,让消息代理随ERP一起退出。
    10、为了方便维护,消息代理也可以发特殊内容,强行关闭ERP系统。这个功能需要通过服务器端发消息
          给消息代理,让消息代理强行关闭ERP系统。  目前我就是这样做的,效果还行,几个系统共用一个消息代理,只要权限设置得当,各用户都能
      正确地收到消息。在消息代理上,也设置了好友列表,可以同时与N个用户实时一对一对话。  关健是把消息代理做好就行。    以上仅参考。  谨听高手的方法。
      

  3.   

    如果不做消息代理,在ERP中也可以实现消息代理的功能,只不过如果系统多,那又得在其他系统中做相似的功能,有些累,我以前就是分别在各系统中做了相似的功能,后来改成了消息代理,方便了很多。如果再考虑做个服务端,那么对于维护用户可以起到很大的帮助。强行关闭某一个用户的ERP就可以通过消息来实现。
      

  4.   

    无服务器?
    erp不是有一个服务器的吗,利用它就行了
      

  5.   

    我的意思:UDP向外送一条信息,  局域网内多台电脑都能收到这条信息. 这种方式会不会被局域网内路由器给拦截掉啊.
    如果用ERP服务器的数据库中转的话, 100台电脑都会连接每隔3秒扫描服务器一次.何必呢.
      

  6.   

    用数据库的目的是为了让消息定向发送,如果楼主不想定向发送,那就是所有的电脑都接收,不用数据库即可。但实际应用中,某条消息只是某些用户需要接收,而其他用户是不用接收的。再说100台电脑也不会每隔3秒去扫描服务器的,只是楼主没想到办法。UDP发送和接收消息是不用扫描服务器的,如果不想把消息记录在案备查,那更不会去访问数据库的。UDP一般不会被路由拦截。仅供参考。