2015-11-25 37 views
0

我创建该广播其名称为组播组中的所有其它应用的小型发送器和接收器应用中为每个插座都sockaddr_in的地址的列表,同时还接受的名字其他应用。是否有可能得到一个组播组

我想我已经发送部分现在完成了,如下图所示:

if (sendto(sock, message, sizeof(message), 0, (struct sockaddr *) &receiver_addr, sizeof(receiver_addr)) < 0) { 
      perror("sendto"); 
      exit(1); 
     } 

的receiver_addr有其IP地址设置为组播组的IP地址,所以我敢肯定,每个插座该组已收到该消息。但是现在我想将从多播组中每个套接字接收到的消息存储到一个数组中。我见过的示例代码使用下面的代码:

if (recvfrom(sock, buf, BUFLEN, 0, (struct sockaddr *) &sender_addr, &senderlen) < 0) 
     { 
      perror("recvfrom"); 
      exit(1); 
     } 

这一次的sender_addr变量是从来自的数据端口的地址。但是这只能获取单个主机发送的地址为sender_addr的信息。我想获得该组播组端口内的所有地址的列表,这样我就可以运行recvfrom的方法的循环,但receiver_addr的值更改为组中每个插座的地址。

回答

2

是否有可能得到一个组播组的每个插座都sockaddr_in的地址的列表

号它甚至可能得到一个组播组成员的名单,更不用说它们的任何属性。

receiver_addr将其ip地址设置为多播组的IP地址,所以我确信组中的每个套接字都已收到该消息。

不,你不是。多播运行在UDP上,UDP是不可靠的协议。你不能确定任何这样的事情。

我想要得到的组播组

坏运气内部端口的所有地址的列表。你不能。

这样我就可以运行recvfrom方法的循环,但将receiver_addr的值更改为组中每个套接字的地址。

您对recvfrom()的参数address的参数有一个基本的误解。这不是您事先设置的过滤器。这是一个结果参数,从那里接收到的数据报告诉你。

+0

有另一种办法我只能让他们都走在组播组 – user217339

+0

收集来自所有插座数据给你送东西,例如作为签署握手。 – EJP

相关问题