FreeRTOS + LWIP -UDP数据传输

杰汉·伊莱里(Ceyhan ILERI)

我是lwip堆栈的新手。我正在尝试通过UDP协议从我的开发板向我的PC发送一些数据。并在两者之间使用以太网电缆。

我给服务器(源代码板)提供了一个IP地址,即192.168.1.75:88。我的计算机的IP地址是192.168.1.2:90。设置此配置并运行程序时,我无法使用Wireshark嗅探任何内容,这意味着根本没有udp软件包交换。但是,当我将所有目标地址更改为255.255.255.255或0.0.0.0时,我可以嗅探一些程序包。

为什么我不能将udp软件包发送到我想要的IP地址?

Main.c

int main(void)
{
   #define dst_port 88
   #define src_port 90

  #ifdef SERIAL_DEBUG
    DebugComPort_Init();
  #endif

  LCD_LED_Init();
  ETH_BSP_Config();
  LwIP_Init();
  IP4_ADDR(&dstaddr,     0, 0, 0, 0);
  IP4_ADDR(&srcaddr,     192, 168, 1, 75);

  pcb = udp_new();

  udp_bind(pcb, &dstaddr, src_port);
  udp_recv(pcb, RecvUTPCallBack, NULL);
  udp_connect(pcb, &dstaddr, dst_port);

  #ifdef USE_DHCP
  /* Start DHCPClient */
  xTaskCreate(LwIP_DHCP_task, "DHCPClient", configMINIMAL_STACK_SIZE * 2, NULL,DHCP_TASK_PRIO, NULL);
  #endif

  /* Start toogleLed4 task : Toggle LED4  every 250ms */
  xTaskCreate(ToggleLed4, "LED4", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIO, NULL);
  xTaskCreate(SendUDP, "UDP", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIO, NULL);

  /* Start scheduler */
  vTaskStartScheduler();
  for( ;; );
}

SendUDP任务

void SendUDP(void * pvParameters)
{
  while(1)
  {     
    pcb = udp_new();
    udp_bind(pcb, &dstaddr, src_port);
    udp_recv(pcb, RecvUTPCallBack, NULL);
    udp_connect(pcb, &dstaddr, dst_port);

    pb = pbuf_alloc(PBUF_TRANSPORT, sizeof((str)), PBUF_REF);
    pb->payload = str;
    pb->len = pb->tot_len = sizeof((str));

    udp_sendto(pcb, pb, &dstaddr, dst_port);
    udp_disconnect(pcb);
    udp_remove(pcb);
    pbuf_free(pb);  
    vTaskDelay(1000);
  }
}
杰汉·伊莱里(Ceyhan ILERI)

我大约一个星期前就知道了,但是我无法在这里发布答案。

首先,在main.h中有一个ip定义,例如

/*Static IP ADDRESS*/
#define IP_ADDR0   192
#define IP_ADDR1   168
#define IP_ADDR2   1
#define IP_ADDR3   15

并在netconf.h中使用此配置

IP4_ADDR(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3);

这就是服务器的IP地址始终为192.168.1.15的原因。

第二,我刚开始使用netconn API代替原始API,这比原始API容易得多。这是我新的SendwithUDP函数,可以很好地工作。

void SendwithUDP(uint16_t *veri, uint8_t length)                                                                    
{
  while(1)
    {
        if(((EventFlags.udp) && (1<<0)) == (1<<0)) 
        {
                        STM_EVAL_LEDToggle(LED3);

                        sendconn = netconn_new( NETCONN_UDP ); 
                        netconn_bind(sendconn, IP_ADDR_ANY, src_port );
                        netconn_connect(sendconn, &clientAddr, 150);                                
                        sendbuf = netbuf_new();
                        data =netbuf_alloc(sendbuf, 2*length);
                        memcpy(data, veri, 2*length);
                        netconn_send(sendconn, sendbuf);    
                        netbuf_free(sendbuf);
                        netbuf_delete(sendbuf);
                        netconn_disconnect(sendconn);
                        netconn_delete(sendconn);       
                        vTaskDelay(10);
            }
      } 
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在lwip ARP中创建RAW UDP连接

来自分类Dev

CUDA设备到主机的数据传输错误

来自分类Dev

如何使用QNetworkAccessManager找出数据传输延迟

来自分类Dev

什么是入站/出站数据传输?

来自分类Dev

滑动窗口数据传输的最大吞吐量

来自分类Dev

Spring Web Flow + Ajax数据传输

来自分类Dev

TCP服务器似乎在LWIP + FreeRTOS中不起作用

来自分类Dev

大型目录/子目录数据传输

来自分类Dev

如何解决OpenSSL错误的数据传输?

来自分类Dev

从Raspberry Pi停止数据传输

来自分类Dev

值对象与数据传输对象

来自分类Dev

使用NGINX调整数据传输成本

来自分类Dev

与GPS的串行通信-连续数据传输

来自分类Dev

如何衡量通过套接字的数据传输速度?

来自分类Dev

Azure SQL数据库中的数据传输

来自分类Dev

Apache FTPSClient挂起数据传输

来自分类Dev

数据传输中的BitTorrent加密

来自分类Dev

高效的数据传输机制

来自分类Dev

Modbus TCP从站。数据传输

来自分类Dev

NSOperations之间的数据传输

来自分类Dev

数据传输率查询

来自分类Dev

数据传输速度差异

来自分类Dev

.mat到python的数据传输

来自分类Dev

通过准备数据传输数据

来自分类Dev

原始 LWIP 发送 TCP 传输到静态 IP

来自分类Dev

BigQuery - 数据传输作业

来自分类Dev

python进程间数据传输

来自分类Dev

跨域数据传输

来自分类Dev

ComputeLibrary CLtensor 数据传输