首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

关于uip中接收UDP广播数据包的有关问题

2012-12-15 
关于uip中接收UDP广播数据包的问题有A,B两个板子,A只通过端口3000进行UDP广播,IP地址为192.168.1.52。B通过

关于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吗?直接发送就可以了吧?
[其他解释]

引用:
广播需要帮定255.255.255.255吗?直接发送就可以了吧?

要绑定吧,不绑定怎么直接发啊?我在A里绑定了255.255.255.255,能发送广播数据,但是B接收广播数据的时候有点问题,接收几次后就断开了,我是将网口过来的数据转发到串口,单点的时候就想,广播就不行了,郁闷啊
[其他解释]
引用:
你的广播地址是192.168.1.255就可以啦。不是255.255.255.255,注意广播的端口和监听的端口一致。

我改成192.168.1.255时却收不到,不知道是不是那个协议支持的不好,我用的是uip协议,现在已经能收到广播数据了,但是一开始接收外部端口的数据时,只能接收一次,还得找找原因啊,谢谢你
[其他解释]
引用:
bind是绑定本地地址端口,udp也可以connect目的地址,也可以直接用sendto.

嗯,接收广播的的已经解决了,还有一个问题,就是上电在接收广播的时候再接收一路外部端口的数据,只能接收一次,还得得再找找原因,谢谢了

热点排行