我的多播(udp)发送器/接收器程序启动并运行。如果我使用setsockopt与发送者启用环回,如下所示:
if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) < 0)
error("loopback failed.");
稍后我将消息发送给每个订阅者,我的发送者如何获得发送的消息?发件人不存储自己的IP地址和端口号,并向自己发送一条消息(基本上订阅自己)吗?
所以它应该是这样的:
receiver1(订阅) - &gt;发送方
receiver2(订阅) - &gt;发送方
什么时候发送:
发件人(info) - &gt; receiver1
发件人(info) - &gt; receiver2
发件人(info) - &gt;发送者? //这个步骤是如何工作的?
感谢您的帮助:)
答案 0 :(得分:0)
在您的代码中,loop
必须是u_char
类型,而不是int
。当然,这也会改变最终的setsockopt()
参数,使其具有值1.我没有这方面的个人经验,但是W. Richard Stevens在UNIX网络编程(第3版),Vol。 1,第21.6节,所以必须如此。
他还说在这里使用类型int
是一个常见的编程错误。
答案 1 :(得分:0)
除了启用环回(实际上可以默认启用,根据http://tldp.org/HOWTO/Multicast-HOWTO-6.html#ss6.1),您还需要订阅多播组。
没有必要向每个接收器发送数据包的单独副本。如果多播订阅是正确的并且您在支持多播的网络上,那么单个传输就足够了。