netconn_recv(conn, &buf);得到的buf怎么得到这些数据struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port
时间: 2024-03-19 14:44:09 浏览: 202
STM32F767+LWIP开发手册_V1.0.zip_RAW_lwip netconn_netconn_stm32 lwip
在调用`netconn_recv(conn, &buf)`之后,会将接收到的数据放入`buf`中。如果您使用的是`UDP`协议,您可以通过以下方式获取相关信息:
1. 获取`udp_pcb`结构体指针:
```c
struct udp_pcb *upcb = conn->pcb.udp;
```
2. 获取`pbuf`结构体指针:
```c
struct pbuf *p;
netbuf_data(buf, (void **)&p, &len);
```
3. 获取发送方的IP地址和端口:
```c
const ip_addr_t *addr = netbuf_fromaddr(buf);
u16_t port = netbuf_fromport(buf);
```
其中,`addr`和`port`分别表示发送方的IP地址和端口,`len`表示接收到的数据的长度。
需要注意的是,`netbuf_fromaddr()`返回的是一个指向IP地址的指针,需要使用`ipaddr_ntoa()`函数进行转换成字符串形式。
阅读全文