关于uip中接收UDP广播数据包的问题
有A,B两个板子,A只通过端口3000进行UDP广播,IP地址为192.168.1.52。B通过2000端口既要接收A的广播数据,又要通过这个端口将自己的数据广播出去,B的IP地址为192.168.1.51。我的思路如下:
如果B要广播,则绑定一个255.255.255.255的IP和一个端口进行广播,初始化程序如下:
void myudp_init(void) //绑定设置
{
uip_ipaddr_t ipaddr;//定义IP类型变量
uip_ipaddr(ipaddr,255,255,255,255); //上位机IP
if(myudp_conn1!=NULL)
{
uip_udp_remove(myudp_conn1);//如果连接已经建立,则删除之
}
myudp_conn1=uip_udp_new(&ipaddr,HTONS(8000));//连接到远端口
if(myudp_conn1!=NULL)
{
uip_udp_bind(myudp_conn1,HTONS(2000));//绑定本地移动站端口2000,即2000--->8000发送数据
}
}
如果B要接收A的广播数据,则直接绑定B的IP地址和一个端口,初始化程序如下:
void myudp_init2(void)
{
uip_ipaddr_t ipaddr1;
uip_ipaddr(ipaddr1,192,168,1,52); A的IP地址
if(myudp_conn2!=NULL)
{
uip_udp_remove(myudp_conn2);
}
myudp_conn2=uip_udp_new(&ipaddr1,HTONS(3000));
if(myudp_conn2!=NULL)
{
uip_udp_bind(myudp_conn2,HTONS(2000));
}
}
这也是我不确定的地方,因为开启了广播支持,不知道这种单播的绑定还行不行,程序里也是这样的,但就是是接收不到A的广播数据,但是B的广播数据可以发送出去。
应用程序里是这样的:
void myudp_appcall(void)
if(uip_udp_conn->rport==HTONS(3000))
{
if(uip_newdata())
{ //=================================标记:此处程序不进入执行
UDP_newdata2();
}
}
else if(uip_udp_conn->rport==HTONS(8000))
{
myudp_init();
if((uip_newdata()))
{ // ---------------此处可进入执行
UDP_newdata1();
}
}
我调试的时候,程序不进入用=====标记的地方执行,也就是说uip_newdata()一直为假,而8000端口那个就好使,是不是接收A广播数据包的时候绑定设置不对呢?该怎么设置呢?各位大侠帮忙看看吧,谢谢了!
[最优解释]
bind是绑定本地地址端口,udp也可以connect目的地址,也可以直接用sendto.
[其他解释]
你的广播地址是192.168.1.255就可以啦。不是255.255.255.255,注意广播的端口和监听的端口一致。
[其他解释]
广播需要帮定255.255.255.255吗?直接发送就可以了吧?
[其他解释]