OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3629|回复: 3

LWIP + ENC28J60 + 组播可以接收组播数据,不能发送组播数据,怎么回事?

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-4-21
在线时间
3 小时
发表于 2016-1-20 12:02:26 | 显示全部楼层 |阅读模式
5金钱
最近需要用到组播,用的是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);

有高手知道怎么回事吗?

最佳答案

查看完整内容[请看2#楼]

解决了。第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
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-4-21
在线时间
3 小时
 楼主| 发表于 2016-1-20 12:02:27 | 显示全部楼层
解决了。第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
回复

使用道具 举报

21

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-1-10
在线时间
10 小时
发表于 2016-1-20 14:19:16 | 显示全部楼层
顶一个
回复

使用道具 举报

11

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2016-3-23
在线时间
32 小时
发表于 2016-10-18 16:31:07 | 显示全部楼层
也看了你得博客了。你也没有说如何实现定时调用 igmp_tmr();这个函数LWIP_poll()是你自己实现的,我们的也没有,所以说这里对于应该在何处调用 igmp_tmr()没有不清楚
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 23:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表