乐鑫技术交流
直播中

李辉

7年用户 1362经验值
私信 关注
[问答]

加入IGMP组后,数据包不再通过UDP发送,为什么?

有谁知道IGMP_Join后发送数据包需要什么
似乎在加入IGMP组后,数据包不再通过UDP发送。
在下面的示例中,第一个数据包总是被发送出去,但第二个数据包不会被发送出去。
提前致谢!!

静态整ICACHE_FLASH_ATTR igmp_join(uint32_t ip) {
   if( ip )
   {
      ip_addr_t ipgroup;
      int ret;
      ipaddr_aton(MULtiCAST_ADDR, & ipgroup);
      os_printf("IGMP Joining: %08x %08x, " , ip, ipgroup.addr);
      espconn_sendto(&HTTPUDPptrespconn, UDPResponse, os_strlen(UDPResponse)); //Send Back Answer   
      ret = espconn_igmp_join( (ip_addr_t *) & ip, & ipgroup); //At this point SendTo stops
      espconn_sendto(&HTTPUDPptrespconn, UDPResponse, os_strlen(UDPResponse)); //Send Back Answer   
      if (ret != 0)
      {
         os_printf( " failed, code %dn " , ret);
      } else {
         os_printf( " joinedn " );
      }
      return 0;
   }
   os_printf( " Failed to obtain current IPn " );
   return 1;
}

回帖(1)

1652711011.026500

2024-7-10 17:50:21
在解释为什么加入IGMP组后,数据包不再通过UDP发送之前,我们首先需要了解一些基本概念。

IGMP(Internet Group Management Protocol,互联网组管理协议)是一种用于管理主机组成员的协议。它允许主机加入或离开多播组,以便接收特定多播组的数据包。多播是一种网络传输方式,允许一个数据包同时发送给多个接收者。

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输层协议,它允许应用程序在不需要建立连接的情况下发送数据包。

现在我们来分析你的问题。在加入IGMP组之后,数据包不再通过UDP发送的原因可能有以下几点:

1. 加入IGMP组后,数据包的传输方式可能已经从单播(unicast)或广播(broadcast)变为多播(multicast)。在这种情况下,数据包不再通过UDP发送,而是通过多播传输。

2. 在你的示例代码中,`igmp_join` 函数用于将主机加入到一个多播组。但是,这个函数本身并不负责发送数据包。数据包的发送应该在其他部分的代码中实现。因此,如果第二个数据包没有被发送出去,可能是因为发送数据包的代码没有正确执行。

3. 如果你希望在加入IGMP组后继续使用UDP发送数据包,你需要确保在发送数据包时使用正确的目标IP地址和端口。在多播环境中,你可能需要使用特定的多播地址和端口,而不是单播地址。

为了解决你的问题,你可以尝试以下步骤:

1. 确保在加入IGMP组后,发送数据包的代码仍然正确执行。检查是否有任何条件或逻辑错误导致第二个数据包没有被发送。

2. 如果你希望在多播环境中继续使用UDP发送数据包,请确保使用正确的多播地址和端口。你可以在发送数据包之前,将单播地址替换为多播地址。

3. 如果问题仍然存在,检查网络环境和配置,确保多播数据包可以正确地在网络中传输。

希望这些信息能帮助你解决问题。如果还有其他问题,请随时提问。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分