基于TCP/IP协议轻量化嵌入式协议栈LwIP方案-综合3

424 阅读2分钟

1 NETCONN 接口编程

1.1 netbuf 结构体

  • LwIP 为了更好描述应用线程发送与接收的数据,并且为了更好管理这些数据的缓冲区, LwIP 定义了一个 netbuf 结构体,它是基于 pbuf 上更高一层的封装,记录了主机的 IP 地址 与端口号,在这里再提醒一下大家,端口号对应的其实就是应用线程。在接收的时候,应 用程序肯定需要知道到底是谁发数据给自己,而在发送的时候,应用程序需要将自己的端 口号与IP地址填充到netbuf结构体对应字段中 image.png

1.2 netconn结构体

  • 在 LwIP 中,如 TCP 连接,UDP 通信,都是需要提供一个编程接口给用户使用的,那 么为了描述这样子的一个接口,LwIP 抽象出来一个 nettonn 结构体,它能描述一个连接, 供应用程序使用,同时内核的 NETCONN API接口也对各种连接操作函数进行了统一的封 装,这样子,用户程序可以很方便使 netconn和编程函数,我们暂且将 netconn称之为连接 结构体。
  • 一个连接结构体中包含的成员变量很多,如描述连接的类型,连接的状态(主要是在 TCP 连接中使用),对应的控制块(如 UDP 控制块TCP 控制块等等),还有对应线程的 消息邮箱以及一些记录的信息 image.png image.png

1.3 netconn相关函数

image.png

1.4 TCP Client

image.png image.png image.png

1.5 TCP Server

image.png image.png image.png

1.6 UDP 实验

image.png image.png

2 Socket接口编程

  • 在 Socket中,它使用一个套接字来记录网络的一个连接,套接字是一个整数,就像我们操作文件一样,利用一个文件描述符,可以对它打开、读、写、关闭等操作,类似的,在网络中,我们也可以对 Socket套接字进行这样子的操作,比如开启一个网络的连接、读取连接主机发送来的数据、向连接的主机发送数据、终止连接等操作

2.1 Socket相关函数

  • image.png

2.2 TCP Client

image.png image.png

2.3 TCP Server

image.png image.png image.png

2.4 UDP 实验

image.png image.png

3 RAW API 接口编程

  • RAW API是基于回调函数实现的 API接口,它是很底层的 API接口,这需要开发者对LwIP 有较深的了解才能很好使用它,RAW API的核心就是对控制块的处理,因为对于报文数据的处理、注册回调函数等都是需要开发者自己去实现,都是比较麻烦的,但是有一个优点,那就是处理数据效率高。

3.1 RAW相关函数

image.png

3.2 TCP Client

  • 注册回调(client_send/client_recv/client_connected/client_errimage.png
  • 回调:client_send与client_recv image.png
  • 回调:client_err image.png

3.3 TCP Server

  • 注册回调(tcpecho_acceptimage.png
  • 回调:tcpecho_recv image.png

3.4 UDP 实验

  • 引用文件 image.png
  • st_buffer对应回调函数的arg image.png

4 HTTP 协议编程

  • 监听80端口 image.png
  • http_server_netconn_serve image.png image.png