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