LWIP 组播通讯问题(IGMP)
有人用过LWIP的组播没 LWIP版本1.3.0一起研究研究
已将opt.h中的 LWIP_IGMP 设为1(打开)
igmp_joingroup
之后跟udp_recv
udp_bind
udp_connect ?
目前这样收不到组播消息 仍然只能收到发往固定IP的
查看
igmp_joingroup 返回值-8
即Illegal Value错误
不知这样传递是否有错误?
struct ip_addr SceneMulti_addr;//代表组播地址
struct in_addr Temp_Inaddr;
struct ip_addr LocalAddr;
#if LWIP_IGMP
inet_aton("224.1.1.4", &Temp_Inaddr);
LocalAddr.addr=0xC0A80032;
SceneMulti_addr.addr=htonl(Temp_Inaddr.s_addr);
i=igmp_joingroup(&LocalAddr, &SceneMulti_addr);
#endif 本帖最后由 牛牛特工 于 2010-5-30 16:55 编辑
单步进去 竟然在第一个判断处就认为我的IP地址不是组播地址 费解
经转换后SceneMulti_addr.s_addr 明明是 0xE0010104
ip_addr_ismulticast(addr1) (((addr1)->addr & ntohl(0xf0000000UL)) == ntohl(0xe0000000UL))
难道说我的htonl是多此一举郁闷
去掉了htonl之后 可以进到下一步 又发现
netif->flags&NETIF_FLAG_IGMP 这个未被置位
在LWIP代码中搜索过一遍从未出现过 netif->flags|=NETIF_FLAG_IGMP;
这样的操作 貌似它死活也不会被置位 那咱们只能自己把它置位了 不知道会不会有问题
在igmp_start中
return ERR_OK;前面添加一句 netif->flags|=NETIF_FLAG_IGMP;
变态的是 调用igmp_start前 竟然也要判断netif->flags&NETIF_FLAG_IGMP 把这地方也给修改了 改为 #if LWIP_IGMP 现在整个都是乱折腾了 经过这样折腾之后 竟然可以用了~~ NETIF_FLAG_IGMP应该在low_level_init(ethernetif.c)函数中设置。
去年在朋友的介绍下我买了一款【丽塔去痘茶】 我是在乐购时尚网 QQ:876931865/#r-pqjj买的,感觉效果很不错。现在我还一直在喝qjj
牛牛特工 发表于 2010-5-30 19:02 static/image/common/back.gif
经过这样折腾之后 竟然可以用了~~
楼主,可以把你的组播程序发给我看看么,我现在也在搞这块。好几天了,都没调出来。:'(麻烦你了 感觉效果很不错。现在我还一直在喝qjj 本帖最后由 evangelion929 于 2020-3-4 14:31 编辑
楼主,用下面这种形式,也是在第二个判断处“LWIP_ERROR("igmp_joingroup: attempt to join allsystems address", (!ip4_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); ”跳出,是因为组播IP地址不能定为224.0.0.1吗?
IP4_ADDR(&ipgroup, 224,0,0,1);//组播IP地址
IP4_ADDR(&addr, 172,16,1,6);//组播IP地址
#if LWIP_IGMP
err = igmp_joingroup((&addr),(&ipgroup));//组播加入当前
#endif
页:
[1]