linux多播 多个接收方,在同一端口上接收多个多播源 – C,Linux

我有一个应用程序从同一端口上的多个组播源接收数据.我能够收到数据.但是,我试图考虑每个组的统计数据(即收到的消息,接收的字节数),并且所有数据都混淆了.有谁知道如何解决这个问题?如果我试着查看发件人的地址,那么它不是多播地址,而是发送机器的IP.

我使用以下套接字选项:

struct ip_mreq mreq;

mreq.imr_multiaddr.s_addr = inet_addr("224.1.2.3");

mreq.imr_interface.s_addr = INADDR_ANY;

setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));

并且:

setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &reuse, sizeof(reuse));

解决方法:

[编辑澄清bind()实际上可能包含多播地址.]

因此,应用程序正在连接多个多播组,并将发送到其中任何一个的消息接收到同一端口. SO_REUSEPORT允许您将多个套接字绑定到同一端口.除端口外,bind()还需要一个IP地址. INADDR_ANY是一个包罗万象的地址,但也可以使用IP地址,包括多播地址.在这种情况下,只有发送到该IP的数据包才会被传送到套接字.即您可以创建多个套接字,每个多播组一个. bind()每个套接字到(group_addr,port),并加入group_addr.然后,发往不同组的数据将显示在不同的套接字上,您将能够以这种方式区分它.

我测试了以下适用于FreeBSD:

#include

#include

#include

#include

#include

#include

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值