LWIP网络实验—RAW_UDP

杀马特。学长 韩版系。学妹 提交于 2019-12-18 20:58:07
  • 编程接口

LWIP有3种编程接口,分别为:RAW、NETCONN和SOCKET
  RAW:RAW编程接口不需要操作系统的支持,可以直接裸机使用LWIP,但是RAW编程接口比较复杂!RAW使用的是回调机制,需要大家了解回调函数。
  NETCONN和SOCKET:这两种编程接口都需要有操作系统的支持,否则的话没法使用,但是这两种接口使用起来比较简单。
  至于究竟使用哪一个就看自己的需求了,建议在实际项目中使用NETCONN或SOCKET编程接口,开发难度低。

  • UPD结构体

LWIP中使用UDP控制块来描述UDP,UDP控制块是UDP协议最核心的东西,UDP控制块是一个结构体,这个结构体在udp.h中定义。

struct udp_pcb 
{
    IP_PCB;	//宏IP_PCB中的各个字段
    struct udp_pcb 		*next;			//指向udp_pcb,用于将控制块组织成链表
    u8_t 				flags;			//控制块状态字段
    u16_t local_port, 	remote_port;  	//本地端口号和目的端口号
    udp_recv_fn 		recv;     		//处理数据的回调函数
    void 				*recv_arg;  	//传递给回调函数的参数
};

其中  IP_PCB; //宏IP_PCB中的各个字段

#define IP_PCB struct ip_addr local_ip; \  //本地ip地址
  struct ip_addr remote_ip; \  //远端ip地址
   /* Socket options */  \
  u16_t so_options;      \
   /* Type Of Service */ \
  u8_t tos;              \
  /* Time To Live */     \
  u8_t ttl;              \
  /* link layer address resolution hint */ \
  IP_PCB_ADDRHINT

UDP控制块链表如下:
在这里插入图片描述
UDP层函数关系如下图:
在这里插入图片描述

  • UDP数据的收发

void udp_demo_recv(void *arg,struct udp_pcb *upcb,struct pbuf *p,struct ip_addr *addr,u16_t port);
err_t udp_send(struct udp_pcb *pcb, struct pbuf *p);

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!