有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())
{ //=================================标记:此处程序不进入执行