欢迎大家来谈谈,QQ是怎样广播系统消息的. 本人开发的三层系统需要类似的功能,
即有时需要向所有的客户端广播信息,请大家给点思路,谢谢!

解决方案 »

  1.   

    qq怎么做的不知道。给点建议:    广播数据即数据从一个工作站发出,局域网内的其他所有工作站都能收到它。这一特征
    适用于无连接协议,因此你可以使用创建一个UDP套接字的方法来实现。因为LAN上的所有机器都可获得并处理广播消息。使用广播消息的不利之处是每台机器都必须对该消息进行处理。比如,一用户在L A N上广播一条消息,每台机器上的网卡都会收到这条消息,并把它上传到网络堆栈。然后,堆栈将这条消息在所有的网络应用中循环,看它们是否应该接收这条消息。通常,这个局域网上的多数机器对该消息都不感兴趣,草草地一弃了之。但是,各台机器仍需花时间来处理这个数据包,看是否有应用对它感兴趣。结果,高广播通信流使LAN上的机器陷入困境,因为每个工作站都要检查这个数据包。值得注意的是,一般情况下,路由器都不会传送广播包。当然,这个你可以设置。还可以尝试多播,多播是指一个进程发送数据的能力,这些数据即将由一个或多个接收端进行接收。进程加入一个多播会话的方法和采用的基层协议有关。比如, I P协议下,多播是广播的一种变形。IP多播要求对收发数据感兴趣的所有主机加入一个特定的组。进程希望加入多播组时,网卡上会增添一个过滤器,这样,只有绑定组地址的数据才会被网络硬件捡起,并上传到网络堆
    栈进行恰当处理。视频会议应用常常使用多播。你可以尝试IP多播以及ATM多播,具体实施,通过winsock1/2都可以,以winsock1举例,
      IP多播组的加入和离开是用setsockopt命令来完成的,同时要用到IP_ADD_MEMBERSHIP(加入组)和IP_DROP_MEMBERSHIP(脱离组)这两个选项。使用这两个套接字选项时,必须传递一个
    ip_mreq结构,具体使用参考MSND。还有一个扯淡的办法,就是用TCP/IP实现,自己设计协议、算法等,使客户端和服务器端通讯。
      

  2.   

    wudi_1982(闲半年了,要挣点钱过年了!) 你好,能不能给点具体实现方法的思路呢?
    先谢
      

  3.   

    目前本人所做三层系统所用的连接是 TSocketConnection, 数据集是 TClientDataSet我想把要广播的数据放在 sql server 数据库里,客户定时从数据库扫描是否有新的消息,如果有,即从服务器取出消息,这是目前我的思路。
    但总觉得这样做很不好,请大家多多提供思路!
      

  4.   

    你使用这些动动来做,(TSocketConnection, 数据集是 TClientDataSet)
    似乎也就是你说的那个思路了,无非就是思路的扩展,不会有根本改变。我觉得可以直接从多播的概念出发,建立组的概念,然后使用基本的winsock来实现,其实很简单的,就几个API函数。如果不打算用API直接搞,那就用你那个思路。
      

  5.   

    谢谢 wudi_1982(闲半年了,要挣点钱过年了!) 指点
      

  6.   

    修改TSocketConnection和ScktSrvr的源码就可以实现,我以前做过,而且客户一直在用.
    SocketConnection和ScktSrvr之间也是TCP/IP通讯,找到他们的协议规则就很容易实现了.