1 NETCONN 接口编程
1.1 netbuf 结构体
- LwIP 为了更好描述应用线程发送与接收的数据,并且为了更好管理这些数据的缓冲区,
LwIP 定义了一个 netbuf 结构体,它是基于 pbuf 上更高一层的封装,记录了主机的 IP 地址
与端口号,在这里再提醒一下大家,端口号对应的其实就是应用线程。在接收的时候,应
用程序肯定需要知道到底是谁发数据给自己,而
在发送的时候,应用程序需要将自己的端 口号与IP地址填充到netbuf结构体对应字段中
1.2 netconn结构体
- 在 LwIP 中,如 TCP 连接,UDP 通信,都是需要提供一个编程接口给用户使用的,那
么为了描述这样子的一个接口,
LwIP 抽象出来一个 nettonn 结构体,它能描述一个连接, 供应用程序使用,同时内核的 NETCONN API接口也对各种连接操作函数进行了统一的封 装,这样子,用户程序可以很方便使 netconn和编程函数,我们暂且将 netconn称之为连接 结构体。 - 一个连接结构体中包含的成员变量很多,如描述连接的类型,连接的状态(主要是在
TCP 连接中使用),对应的控制块(如
UDP 控制块、TCP 控制块等等),还有对应线程的 消息邮箱以及一些记录的信息
1.3 netconn相关函数
1.4 TCP Client
1.5 TCP Server
1.6 UDP 实验
2 Socket接口编程
- 在 Socket中,它使用一个套接字来记录网络的一个连接,套接字是一个整数,就像我们操作文件一样,利用一个文件描述符,可以对它
打开、读、写、关闭等操作,类似的,在网络中,我们也可以对 Socket套接字进行这样子的操作,比如开启一个网络的连接、读取连接主机发送来的数据、向连接的主机发送数据、终止连接等操作
2.1 Socket相关函数
2.2 TCP Client
2.3 TCP Server
2.4 UDP 实验
3 RAW API 接口编程
- RAW API是基于
回调函数实现的 API接口,它是很底层的 API接口,这需要开发者对LwIP 有较深的了解才能很好使用它,RAW API的核心就是对控制块的处理,因为对于报文数据的处理、注册回调函数等都是需要开发者自己去实现,都是比较麻烦的,但是有一个优点,那就是处理数据效率高。
3.1 RAW相关函数
3.2 TCP Client
- 注册回调(
client_send/client_recv/client_connected/client_err) - 回调:client_send与client_recv
- 回调:client_err
3.3 TCP Server
- 注册回调(
tcpecho_accept) - 回调:tcpecho_recv
3.4 UDP 实验
- 引用文件
- st_buffer对应回调函数的arg
4 HTTP 协议编程
- 监听80端口
- http_server_netconn_serve