[求助] UDP点对点通信如何改为UDP广播通信

chenbingjy   2018-12-4 16:51 楼主
我用正点原子的板子试网口程序,UDP点对点通信已成功。
想改为广播方式,把目标IP地址设为255.255.255.255
但是通信不成功,电脑可以收到单片机发的数据,
而单片机收不到电脑发的数据。
请高手指教,还要改其他地方吗?谢谢!

为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

回复评论 (6)

可以试下不用全网段广播,比如改为192.168.1.255试下。
点赞  2018-12-4 20:38
不光是ip,ip你可以用广播ip没问题,另外两端的端口也是要相同的,你的目的地端口和对面打开的端口要是同一个端口
点赞  2018-12-5 08:42
引用: LeoMe 发表于 2018-12-5 08:42
不光是ip,ip你可以用广播ip没问题,另外两端的端口也是要相同的,你的目的地端口和对面打开的端口要是同一 ...

端口都是8089.
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2018-12-5 08:44
有人说,IP设为自动获取,是要对端具备DHCP服务器才行的。那广播方式通信,电脑IP地址是不是也要分配一个固定的地址啊?可是要是分配一个固定的地址,不用广播方式也能通信呀。我糊涂了。
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2018-12-5 08:49
引用: lcn1992 发表于 2018-12-4 20:38
可以试下不用全网段广播,比如改为192.168.1.255试下。

谢谢!试过了,不行
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2018-12-5 10:11
//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;
       
}
我把程序改成这样,电脑能收到单片机的数据,单片机收不到电脑发的数据。
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2018-12-6 10:40
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复