OpenEdv-开源电子网

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

如何把UDP点对点通信改为广播通信

[复制链接]

74

主题

182

帖子

0

精华

高级会员

Rank: 4

积分
588
金钱
588
注册时间
2014-10-15
在线时间
137 小时
发表于 2018-12-4 16:25:52 | 显示全部楼层 |阅读模式
1金钱
我用正点原子的STM32F767板子试网口程序,UDP点对点通信已成功。
想改为广播方式,把目标IP地址设为255.255.255.255
但是通信不成功,电脑可以收到单片机发的数据,
而单片机收不到电脑发的数据。
请高手指教,还要改其他地方吗?谢谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

74

主题

182

帖子

0

精华

高级会员

Rank: 4

积分
588
金钱
588
注册时间
2014-10-15
在线时间
137 小时
 楼主| 发表于 2018-12-5 10:42:13 | 显示全部楼层
回复

使用道具 举报

74

主题

182

帖子

0

精华

高级会员

Rank: 4

积分
588
金钱
588
注册时间
2014-10-15
在线时间
137 小时
 楼主| 发表于 2018-12-5 13:37:32 | 显示全部楼层
//设置远端IP地址
void udp_demo_set_remoteip(void)
{
        u8 *tbuf;
        u16 xoff;
        u8 key;
          
        tbuf=mymalloc(SRAMIN,100);        //申请内存
        if(tbuf==NULL)return;
        //前三个IP保持和DHCP得到的IP一致
//        lwipdev.remoteip[0]=lwipdev.ip[0];
//        lwipdev.remoteip[1]=lwipdev.ip[1];
//        lwipdev.remoteip[2]=lwipdev.ip[2];
        lwipdev.remoteip[0]=255;
        lwipdev.remoteip[1]=255;
        lwipdev.remoteip[2]=255;
        sprintf((char*)tbuf,"Remote IP:%d.%d.%d.",lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2]);//远端IP
       
        //POINT_COLOR=BLUE;
        xoff=strlen((char*)tbuf)*8+30;
         
       
        myfree(SRAMIN,tbuf);
}
发现一个地方有问题,这儿也要改成255,可是还是不行。
在网络助手发送数据,可以看到网口指示灯闪,证明数据发过来了。
就是单片机收不到数据。
回复

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17666
金钱
17666
注册时间
2018-3-3
在线时间
523 小时
发表于 2018-12-5 18:21:44 | 显示全部楼层
网络助手怎么设置的
/*
*
*
*
*
*
*/
回复

使用道具 举报

74

主题

182

帖子

0

精华

高级会员

Rank: 4

积分
588
金钱
588
注册时间
2014-10-15
在线时间
137 小时
 楼主| 发表于 2018-12-5 18:27:57 | 显示全部楼层
2.jpg


回复

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2018-2-5
在线时间
11 小时
发表于 2018-12-6 07:15:00 来自手机 | 显示全部楼层
广播地址是那个段的255
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12995
金钱
12995
注册时间
2012-11-26
在线时间
3790 小时
发表于 2018-12-6 08:35:03 | 显示全部楼层
第一次听说网络通信还带广播的,楼主以前是玩ziggbe的?
学无止境
回复

使用道具 举报

74

主题

182

帖子

0

精华

高级会员

Rank: 4

积分
588
金钱
588
注册时间
2014-10-15
在线时间
137 小时
 楼主| 发表于 2018-12-6 10:34:23 | 显示全部楼层
//UDP测试
void udp_demo_test1(void)
{
        err_t err;
        //struct udp_pcb *udppcb;          //定义一个TCP服务器控制块
        struct ip_addr rmtipaddr;          //远端ip地址
       
        u8 *tbuf;
        u8 key;
        u8 res=0;               
        u8 t=0;
       
        udp_demo_set_remoteip();//先选择IP
          
        tbuf=mymalloc(SRAMIN,200);        //申请内存
        if(tbuf==NULL)return ;                //内存申请失败了,直接退出
       
       
       
        udppcb=udp_new();
        if(udppcb)//创建成功
        {
                IP4_ADDR(&rmtipaddr,lwipdev.remoteip[0],lwipdev.remoteip[1],lwipdev.remoteip[2],lwipdev.remoteip[3]);
                //err=udp_connect(udppcb,&rmtipaddr,UDP_DEMO_PORT);//UDP客户端连接到指定IP地址和端口号的服务器
                //err=udp_connect(udppcb,IP_ADDR_ANY,UDP_DEMO_PORT);//UDP客户端连接到指定IP地址和端口号的服务器
                err=udp_connect(udppcb,IP_ADDR_BROADCAST,UDP_DEMO_PORT);//UDP客户端连接到指定IP地址和端口号的服务器
                if(err==ERR_OK)
                {
                        err=udp_bind(udppcb,IP_ADDR_ANY,UDP_DEMO_PORT);//绑定本地IP地址与端口号
                       
                        //err=udp_bind(udppcb,IP_ADDR_BROADCAST,UDP_DEMO_PORT);//绑定本地IP地址与端口号
                        if(err==ERR_OK)        //绑定完成
                        {
                                udp_recv(udppcb,udp_demo_recv,NULL);//注册接收回调函数
                               
                        }else res=1;
                }else res=1;               
        }else res=1;
       
}
这个函数改成这样,电脑能收到单片机的数据,单片机收不到电脑发的数据。

回复

使用道具 举报

16

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
368
金钱
368
注册时间
2019-10-24
在线时间
153 小时
发表于 2021-5-14 10:04:50 | 显示全部楼层
楼主,请问解决了吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 20:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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