0

我已经启动并运行了我的多播 (udp) 发送方/接收方程序。如果我使用 setsockopt 启用与发送方的环回,如下所示:

if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) < 0)
    error("loopback failed.");

后来我将消息发送给每个订阅者,我的发件人如何获得发出的消息?发件人不存储自己的 IP 地址和端口号并向自己发送消息(基本上订阅自己)是吗?

所以它应该是这样的:

接收者1(订阅)-> 发送者

接收者2(订阅)-> 发送者

什么时候发送:

发送者(信息)-> 接收者1

发送者(信息)-> 接收者2

发件人(信息)-> 发件人?//这一步是如何工作的?

谢谢您的帮助 :)

4

2 回答 2

0

除了启用环回(实际上可能默认启用,根据http://tldp.org/HOWTO/Multicast-HOWTO-6.html#ss6.1),您还需要订阅多播组。

不必向每个接收者发送单独的数据包副本。如果多播订阅是正确的并且您在支持多播的网络上,那么单次传输就足够了。

于 2011-04-21T15:33:53.170 回答
0

在您的代码中,loop必须是 type u_char,而不是int. 当然,这也会将最终setsockopt()参数的值更改为 1。我对此没有个人经验,但是 W. Richard Stevens 在 UNIX Network Programming (3rd edition), Vol. 中这么说。1,第 21.6 节,所以必须如此。

他还说int在这里使用类型是一个常见的编程错误。

于 2011-04-21T04:20:59.373 回答