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

不跑系统的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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版