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

2019-03-23 15:01发布

我用正点原子的板子试网口程序,UDP点对点通信已成功。想改为广播方式,把目标IP地址设为255.255.255.255但是通信不成功,电脑可以收到单片机发的数据,而单片机收不到电脑发的数据。请高手指教,还要改其他地方吗?谢谢!
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
lcn1992
1楼-- · 2019-03-23 20:01
 精彩回答 2  元偷偷看……
LeoMe
2楼-- · 2019-03-23 21:19
不光是ip,ip你可以用广播ip没问题,另外两端的端口也是要相同的,你的目的地端口和对面打开的端口要是同一个端口
chenbingjy
3楼-- · 2019-03-24 02:18
LeoMe 发表于 2018-12-5 08:42
不光是ip,ip你可以用广播ip没问题,另外两端的端口也是要相同的,你的目的地端口和对面打开的端口要是同一 ...

端口都是8089.
chenbingjy
4楼-- · 2019-03-24 07:08
 精彩回答 2  元偷偷看……
chenbingjy
5楼-- · 2019-03-24 07:55
lcn1992 发表于 2018-12-4 20:38
可以试下不用全网段广播,比如改为192.168.1.255试下。

谢谢!试过了,不行
chenbingjy
6楼-- · 2019-03-24 10:00
//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;
       
}
我把程序改成这样,电脑能收到单片机的数据,单片机收不到电脑发的数据。

一周热门 更多>