目前在做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)这个接收函数,如果不要发送不成功。 |
评分
查看全部评分
你没有设置发送目标的IP地址或者MAC地址,
导致发送的数据不知道发到那里云了。
而刚好使用接收函数,接收到的数据中包含所需要的数据,
所以当使用接收函数后就可以用正常发送数据。
建议你使用“IPOP v4.1”工具的“报文捕获”功能,分析一下网络数据包。
这里有下载地址:
https://www.stmcu.org.cn/module/forum/thread-614923-1-1.html
评分
查看全部评分
你好,在这里就已经设置了目标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);
当接收到网络数据后,也打印出来,看看是否跟你的目标通信地址相同。
我估计应该是不一样的。