如何知道组播UDP中的组成员数?

时间:2017-05-20 17:53:35

标签: c udp multicast

我正在使用C语言制作聊天程序。 在那里,我必须知道使用相同多播地址的组成员数量。 有什么方法可以知道吗?

2 个答案:

答案 0 :(得分:0)

一般来说,没有内置的方法可以知道有多少成员。理论上可能有成千上万的。

您可以使用pcap库来侦听IGMP消息,但这只会告诉您何时有人加入或离开该组,而不是当前在该组中的人。您也可以ping多播组并查看谁响应,但您也需要一个pcap库。

在您的应用程序环境中,您可能想知道该应用程序的运行实例数。在这种情况下,您需要在协议中定义一种类似于ping的特定类型的消息。应用程序的一个实例会在启动时发送此消息,并且接收它的任何其他实例都应该响应。

可能存在大量成员的可扩展性问题,但如果您刚刚开始,它应该可以正常工作。

答案 1 :(得分:0)

你不能通过窥探IGMP来做到这一点。

您和客户端之间的每台主机和路由器都会抑制此信息,包括客户端主机本身。只有当发送方已知的成员数分别为1或0时,才会发送IGMP加入和离开消息。如果另一个成员加入同一主机,则不会发送另一个加入。类似地,如果到达路由器的加入消息使路由器已知的成员主机数从零变为1,则它会发送上游连接,但不会从1到2或更多时发送。

结果是任何特定主机都知道的是下游会员有或不是。

如果你想知道总数,你必须自己在你的应用程序协议中构建消息......哪种类型会破坏多播点。