行业知识
LWIP RAW编程接口 UDP函数详解
2026-11-04 20:29:09
来源:互联网转载
一、udp.c 中与 UDP 报文处理有关的函数之间的关系
二、UDP 的 RAW API 功能函数
�� LWIP 的 RAW API 编程方式是基于回调机制的,当我们初始化应用的时候我们必须为内核中不同的事件注册相应的回调函数,当相应的事件发生的时候这些回调函数就会被调用
三、udp代码
myUdp.h
#ifndef _MYUDP_H#define _MYUDP_Hvoid MyUdpInit(void);#endif
myUdp.c
#include "myudp.h"#include "lwip/netif.h"#include "lwip/ip.h"#include "lwip/tcp.h"#include "lwip/init.h"#include "netif/etharp.h"#include "lwip/udp.h"#include "lwip/pbuf.h"#include #include /*建立“连接”。注意这里没有真正意义上的连接,没有握手挥手的过程。 只是设置了远端的ip地址和端口,也就是把远端的ip和端口保存到了udp协议控制块中。使用函数udp_connect建立“连接”。在UDP传输中建立“连接”并不是必须的。建立“连接”只是让远端的ip地址和端口保存到udp协议控制块中。如果执行了建立“连接”这个过程,那么后续可以使用udp_send函数去发送数据;如果没有执行建立“连接”这个过程,后续就必须使用udp_sendto函数去发送数据*///UDP服务器发送数据void udp_demo_senddata(struct udp_pcb *upcb,char *tcp_demo_sendbuf){struct pbuf *ptr;ptr=pbuf_alloc(PBUF_TRANSPORT,strlen((char*)tcp_demo_sendbuf),PBUF_POOL); //申请内存if(ptr){pbuf_take(ptr,(char*)tcp_demo_sendbuf,strlen((char*)tcp_demo_sendbuf)); //将tcp_demo_sendbuf中的数据打包进pbuf结构中udp_send(upcb,ptr);//udp发送数据 pbuf_free(ptr);//释放内存} } static void udp_demo_recv(void *arg,struct udp_pcb *upcb,struct pbuf *p,struct ip_addr *addr,u16_t port){ struct pbuf *q = NULL; const char* reply = "This is reply!\n"; pbuf_free(p); q = pbuf_alloc(PBUF_TRANSPORT, strlen(reply)+1, PBUF_RAM); if (!q) { printf("out of PBUF_RAM\n"); return; } memset(q->payload, 0 , q->len); memcpy(q->payload, reply, strlen(reply)); udp_sendto(upcb, q, addr, port);// udp_demo_senddata(upcb,"hello"); pbuf_free(q);}void MyUdpInit(void){struct udp_pcb *udpecho_pcb;struct ip_addr rmtipaddr; //远端ip地址udpecho_pcb=udp_new();if(udpecho_pcb)//创建成功{ IP4_ADDR(&rmtipaddr,192,168,1,104);//udp_connect(udpecho_pcb,&rmtipaddr,9999);//UDP客户端连接到指定IP地址和端口号的服务器udp_bind(udpecho_pcb, IP_ADDR_ANY, 9999);/* 绑定端口号 */udp_recv(udpecho_pcb, udp_demo_recv, NULL);/* 注册接收数据回调函数 */}}
下一篇:木筏求生服务器怎么连接?