使用lwIP的TCP/IP协议栈提供的服务有两种方式:一种是使用lwIP API接口,另一种是直接调用TCP和UDP模块中的函数。本文主要介绍第二种中TCP模块部分的主要函数。
本文在xilinx的SDK工具中根据生成的源码总结出的几个主要函数,源码中其它大部分函数均是被这几个主要函数的调用来实现功能的。通过这几个函数可以直接在裸机下运行实现协议。需要注意的是,所有函数均是基于“tcp_pcb”这样一个结构体上实现的,定义如图所示。
这个结构体用于管理tcp协议,包括连接、数据包、收发等状态。一般不需要自己操作,均是由模块函数来使用的。我们可以简单看一下其组成,在实际应用中根据需要可以查看结构体中的某些项。下面开始介绍函数,介绍顺序不重要。
一、tcp.c文件
1、err_t tcp_close(struct tcp_pcb *pcb)
说明:断开PCB中的连接,释放其占用资源,无论其正在监听或已经建立了连接。
参数:pcb表示要关闭的协议控制块。
返回:ERR_OK表示连接已经被断开,其它表示pcb没有被断开,其资源没有被释放。
PCB(protocol control block)协议控制块,包括tcp和udp等多种,每种协议有自己的协议控制块,如tcp_pcb。另外,err开头的数据类型一般是int型,表示状态,一般不需理会。
2、err_t tcp_bind(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port)
说明:设置某个协议控制块用于连接的本地ip地址和端口号。
参数:pcb协议控制块;ipaddr表示ip地址的结构体,用IP_ADDR_ANY设置默认本地ip地址;port表示16位端口号。
返回:ERR_USE表示端口号被占用,ERR_OK表示设置成功
ip_addr结构体中只有一个32位整数项:ipaddr->addr,ip地址应由高到低位依次填充该项。这个IP地址的结构体应该在使用本函数前事先定义好。
3、struct tcp_pcb * tcp_li