C++ 是否可以获取多播组中每个套接字的所有sockaddr_in地址列表

C++ 是否可以获取多播组中每个套接字的所有sockaddr_in地址列表,c++,windows,network-programming,multicast,C++,Windows,Network Programming,Multicast,我正在创建一个小型的发送方和接收方应用程序,它向多播组中的所有其他应用程序广播其名称,同时也接收其他应用程序的名称 我想我已经完成了发送部分,如下所示: if (sendto(sock, message, sizeof(message), 0, (struct sockaddr *) &receiver_addr, sizeof(receiver_addr)) < 0) { perror("sendto"); exit(1);

我正在创建一个小型的发送方和接收方应用程序,它向多播组中的所有其他应用程序广播其名称,同时也接收其他应用程序的名称

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

if (sendto(sock, message, sizeof(message), 0, (struct sockaddr *) &receiver_addr, sizeof(receiver_addr)) < 0) {
            perror("sendto");
            exit(1);
        }
if(sendto(sock,message,sizeof(message),0,(struct sockaddr*)和receiver\u addr,sizeof(receiver\u addr))<0){
perror(“sendto”);
出口(1);
}
receiver_addr将其ip地址设置为多播组的ip地址,因此我确信组中的每个套接字都已收到消息。但是现在我想将从多播组中的每个套接字接收到的消息存储到一个数组中。我看到的示例代码使用以下代码:

if (recvfrom(sock, buf, BUFLEN, 0, (struct sockaddr *) &sender_addr, &senderlen) < 0)
        {
            perror("recvfrom");
            exit(1);
        }
if(recvfrom(sock,buf,BUFLEN,0,(struct sockaddr*)和sender\u addr和senderlen)<0)
{
perror(“recvfrom”);
出口(1);
}
这一次,sender_addr变量是数据来自的端口的地址。但是,这只获取单个主机发送的信息,地址为sender\u addr。我想获得多播组内所有端口地址的列表,这样我就可以运行recvfrom方法的循环,但将receiver_addr的值更改为组中每个套接字的地址

是否可以获取多播组中每个套接字的所有sockaddr_in地址列表

不,甚至不可能获得多播组成员的列表,更不用说他们的任何属性了

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

不,你不是。多播通过UDP运行,UDP是一种不可靠的协议。你不能肯定有这样的事

我想获得多播组内所有端口地址的列表

运气不好。你不能

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


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

我是否可以采取另一种方法从多播组中的所有套接字收集数据,只需让它们都向您发送一些信息,例如作为登录握手。