天线|RF射频
直播中

冯虎虔

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

为什么LWIP + ENC28J60 + 组播不能发送组播数据?

最近需要用到组播,用的是LWIP + ENC28J60  。经过一番配置后,现在的情况是:可以接收到组播数据,但是发送组播数据,TCP/IP调试助手收不到组播数据,wireshark抓包也没发现发送的数据。
我的配置:
1.直接把ENC28J60的ERXFCON寄存器设置为0,可以接收所有数据包。
2.lwip的opt.h中设置LWIP_IGMP为1,开启组播
3.low_level_init函数中 netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP | NETIF_FLAG_IGMP;//添加IGMP
4.定时调用 igmp_tmr();
5.UDP初始化中添加
      IP4_ADDR(&ipgroup, 230,0,0,11);//添加组播地址
      igmp_joingroup(IP_ADDR_ANY,(struct ip_addr *)(&ipgroup));
      udp_bind(udp_server_PCB,IP_ADDR_ANY,1177);        
      udp_bind(udp_server_pcb,&ipgroup,65000);        
      udp_recv(udp_server_pcb,udp_server_rev,NULL);//接收回调函数
6.发送组播数据用
     udp_sendto(udp_server_pcb, p,(struct ip_addr *) (&ipgroup),65000);
有高手知道怎么回事吗?

回帖(3)

刘继牛

2019-10-9 08:40:01
解决了。第5步中udp_bind(udp_server_pcb,&ipgroup,65000);  改为udp_bind(udp_server_pcb,IP_ADDR_ANY,65000);  就好了。详见我的博客:http://blog.csdn.net/lutao614/article/details/50548099
举报

李捷

2019-10-9 08:51:30
顶一个
举报

张志强

2019-10-9 09:10:30
也看了你得博客了。你也没有说如何实现定时调用 igmp_tmr();这个函数LWIP_poll()是你自己实现的,我们的也没有,所以说这里对于应该在何处调用 igmp_tmr()没有不清楚
举报

更多回帖

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