gpt4 book ai didi

c - UDP:为两个不同的多播流监听相同的端口

转载 作者:IT王子 更新时间:2023-10-29 01:10:28 25 4
gpt4 key购买 nike

我需要使用同一个端口收听 2 个不同的多播组。 程序 A 将从 230.0.0.1 监听,程序 B230.0.0.2 监听。两个多播组使用相同的端口 2000,我无法控制它。

当我运行我的程序时,我在每个程序中收到两个多播流,即在 230.0.0.1230.0.0.2 上广播的数据包。我怀疑问题是由于公共(public)端口引起的。这是我用来订阅多播的代码:

if( (sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0 ) {
perror("socket");
return -1;
}

if( setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0 ) {
perror("setsockopt SO_REUSEADDR");
return -1;
}

memset(&in_addr, 0, sizeof(in_addr));
in_addr.sin_family = AF_INET;
in_addr.sin_addr.s_addr = htonl(INADDR_ANY);
in_addr.sin_port = htons(2000);
if( bind(sd, (struct sockaddr*)&in_addr, sizeof(in_addr)) < 0 ) {
perror("bind");
return -1;
}

memset(&req, 0, sizeof(req));
inet_aton(intfc_ip, &req.imr_interface);
inet_aton("230.0.0.1", &req.imr_multiaddr);
if( setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &req, sizeof(req)) < 0 ) {
perror("setsockopt IP_ADD_MEMBERSHIP");
return -1;
}

recv()...

如何在每个节目中过滤特定的组播组?

最佳答案

如果你改变

in_addr.sin_addr.s_addr = htonl(INADDR_ANY);

inet_aton(<your wanted IP address>, &in_addr.sin_addr.s_addr);

你可以取得更大的成功。

(如果您将程序更改为与 getaddrinfo() 一起使用,您就可以让它面向 future 。)

关于c - UDP:为两个不同的多播流监听相同的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8480132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com