打印
[嵌入式网络系统设计]

LWIP 组播通讯问题(IGMP)

[复制链接]
17018|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
牛牛特工|  楼主 | 2010-5-30 16:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有人用过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:44 | 只看该作者
本帖最后由 牛牛特工 于 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 现在整个都是乱折腾了

使用特权

评论回复
板凳
牛牛特工|  楼主 | 2010-5-30 19:02 | 只看该作者
经过这样折腾之后 竟然可以用了~~

使用特权

评论回复
地板
Jade86| | 2010-8-29 21:18 | 只看该作者
NETIF_FLAG_IGMP应该在low_level_init(ethernetif.c)函数中设置。

使用特权

评论回复
5
fsadfwae| | 2012-12-14 14:50 | 只看该作者


去年在朋友的介绍下我买了一款【丽塔去痘茶】 我是在乐购时尚网 QQ:876931865  /#r-pqjj买的,感觉效果很不错。现在我还一直在喝qjj

使用特权

评论回复
6
s05812229| | 2013-4-25 08:24 | 只看该作者
牛牛特工 发表于 2010-5-30 19:02
经过这样折腾之后 竟然可以用了~~

楼主,可以把你的组播程序发给我看看么,我现在也在搞这块。好几天了,都没调出来。:'(麻烦你了

使用特权

评论回复
7
零三翟邢止胃| | 2019-3-16 12:46 | 只看该作者
感觉效果很不错。现在我还一直在喝qjj

使用特权

评论回复
8
evangelion929| | 2020-3-4 13:47 | 只看该作者
本帖最后由 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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

618

帖子

2

粉丝