你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

不跑系统的UDP发送和接收

[复制链接]
paulkiyt 提问时间:2017-12-20 16:33 /
目前在做UDP发送和接收相关的事情,但是我在进行UDP发送的时候必须要执行一个接收的函数,这个为什么?目前我的mcu只发送数据,不需要接收数据,为何还要执行那个接收的函数。
部分具体代码如下:
    IP4_ADDR(&fsl_netif0_ipaddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3);
    IP4_ADDR(&fsl_netif0_netmask, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3);
    IP4_ADDR(&fsl_netif0_gw, configGW_ADDR0, configGW_ADDR1, configGW_ADDR2, configGW_ADDR3);
    lwip_init();
    netif_add(&fsl_netif0, &fsl_netif0_ipaddr, &fsl_netif0_netmask, &fsl_netif0_gw, NULL, ethernetif_init, ethernet_input);
    netif_set_default(&fsl_netif0);
    netif_set_up(&fsl_netif0);
    udpecho_raw_init();


初始化完成后就发数据:
struct pbuf *q = NULL;  
   const char* senddata = "senddata£ºHello\n";  
   struct udp_pcb *upcb;  
   err_t  stus;
   upcb = udp_new();  
   udp_bind(upcb, IP_ADDR_ANY, 7);  
   q = pbuf_alloc(PBUF_TRANSPORT, strlen(senddata)+1, PBUF_ROM);  
   if(!q)  
   {  
    PRINTF("out of PBUF_RAM\n");  
   }  
         q->payload = (void *)senddata;
    while (1)
    {
        /* Poll the driver, get any outstanding frames */
                        stus=udp_sendto(upcb, q, &fsl_netif0_gw, 8080);
         if(stus ==ERR_OK)
         {
                 PRINTF("send sucessful!\n");
         }
   ethernetif_input(&fsl_netif0);

}


为什么需要 ethernetif_input(&fsl_netif0)这个接收函数,如果不要发送不成功。
收藏 2 评论8 发布时间:2017-12-20 16:33

举报

8个回答
paulkiyt 回答时间:2017-12-21 08:46:44
自顶不沉
tobot 回答时间:2018-3-17 14:39:26
我没细看,和时序有关吗?
windyxin872 回答时间:2018-3-17 16:41:40
膜拜  
mowenxiong 回答时间:2018-3-17 17:04:01
不错
无薪税绵 回答时间:2018-3-17 17:35:18
估计是:
你没有设置发送目标的IP地址或者MAC地址,
导致发送的数据不知道发到那里云了。
而刚好使用接收函数,接收到的数据中包含所需要的数据,
所以当使用接收函数后就可以用正常发送数据。

建议你使用“IPOP v4.1”工具的“报文捕获”功能,分析一下网络数据包。

这里有下载地址:
https://www.stmcu.org.cn/module/forum/thread-614923-1-1.html

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

paulkiyt 回答时间:2018-3-19 09:41:27
无薪税绵 发表于 2018-3-17 17:35
估计是:
你没有设置发送目标的IP地址或者MAC地址,
导致发送的数据不知道发到那里云了。

你好,在这里就已经设置了目标IP
  IP4_ADDR(&fsl_netif0_ipaddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3);
    IP4_ADDR(&fsl_netif0_netmask, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3);
    IP4_ADDR(&fsl_netif0_gw, configGW_ADDR0, configGW_ADDR1, configGW_ADDR2, configGW_ADDR3);
无薪税绵 回答时间:2018-3-19 10:57:12
初始化时,先打印出 configIP_ADDRx、configNET_MASKx、configGW_ADDRx 这几个值,

当接收到网络数据后,也打印出来,看看是否跟你的目标通信地址相同。

我估计应该是不一样的。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版