2015-11-25 64 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

相關問題