微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM7单片机+RTL8019嵌入式TCP_IP协议栈使用分析

ARM7单片机+RTL8019嵌入式TCP_IP协议栈使用分析

时间:12-05 来源:互联网 点击:
一、总则
本文件是嵌入式TCP/IP协议栈的说明文件,嵌入式TCP/IP应用开发人员可通过阅读本文件,掌握在嵌入式TCP/IP协议栈的基础上开发服务器和客户端应用程序,如FTP服务器,WEB服务器,串口服务器等等。
二、参考文件
1)TCP_IP详解卷1,2,3
2)RFC 959 (rfc959) - File Transfer Protocol.htm
3)rfc1945- Hypertext Transfer Protocol -- HTTP/1.0
三、技术说明
1)用户应用协议栈则需要编写以太网的数据报收发驱动,就可以使用协议栈提供的标准SOCKET API,完成服务器和客户端应用程序的开发。
2)协议栈运行于非操作系统的环境下,因此它的运行速度与一般采用多任务操作系统的TCP/IP协议,速度相对说来要快。
3)协议栈完成的功能包括ARP,IP,ICMP(ping),TCP,UDP,暂不支持IGMP,RARP。
4)协议栈采用C代码编写,可方便的移植于各种单片机平台。
5)协议栈在ARM7+RTL8019硬件环境下测试,并建立了FTP服务器和WEB服务器,性能稳定。
6)协议栈建立的FTP服务器和WEB服务器与Internet Explorer浏览器和ftp.exe相互兼容。
7)协议栈每一个SOCKET上建了数据缓冲队列(数据结构),用于接收SOCKET的并发数据,实现多SOCKET的并发数据报处理,可同时运行FTP服务器和WEB服务器。
8)协议栈实现了ACK的延时答应(200ms),支持TCP多包发送和接收,但未支持TCP数据报的失序处理,因此适合局域网内使用。

四、SOCKET API函数
1)函数SOCKET * socket(u16 af,u16 type,u16 protocol)
本函数功能是从SOCKET pool中分配一个SOCKET插口,供应用程序使用,其参数说明如下:
1.参数af,type—无意义,保留为扩充功能使用。
2.参数protocol—为分配SOCKET的类型,包括TCP_PROTOCOL和UDP_PROTOCOL两个类型。
3.返回值:函数执行成功,返回SOCKET*指针指向一个SOCKET,失败返回NULL
2)函数u16 bind(SOCKET * sock,struct sockaddr * address,u8 len)
本函数功能是将IP地址和端口绑定到一个SOCKET 指针* sock指向的SOCKET。
1.SOCKET * sock—指向被绑定的SOCKET。
2.struct sockaddr * address—指向IP地址和端口。
3.len—无意义,保留为扩充功能使用。
4.返回值:SUCC。
3)函数u16 listen(SOCKET * sock, u16 QTY)
本函数功能是启动被绑定了地址和端口的 SOCKET * sock,触发其为监听状态。本函数由服务器端应用程序使用。
1.SOCKET * sock—指向被bind的SOCKET。
2.返回值:SUCC。
4)函数u16 connect(SOCKET * sock, struct sockaddr * sevaddr,u8 len)
本函数功能是用于建立一个连接,到服务器,服务器的地址和端口由参数sevaddr指定。该函数由客户端使用。
1.SOCKET * sock—指向被连接的本地SOCKET。
2.struct sockaddr * sevaddr,-- 服务器的地址和端口.
3.u8 len—无意义,保留为扩充功能使用。
4.返回值:是SOCKET句柄。
5)函数u16 accept(SOCKET * sock,struct sockaddr * address,u16 *iii)
本函数返回一个已连接的SOCKET句柄,供函数recv(),send()收发数据使用。
1.SOCKET * sock—指向一个被绑定地址和端口的SOCKET
2.struct sockaddr * address,u16 *iii--无意义,保留为扩充功能使用。
3.返回值:是SOCKET句柄。
6)函数u16 recv(u16 handle,u8 * rec_buff,u16 len,u16 i)
指定句柄读取数据,由TCP使用
1.u16 handle--指定句柄
2.u8 * rec_buff—缓冲区首地址
3.u16 len—读取数据的长度
4.u16 i--无意义,保留为扩充功能使用。
5.返回值:为已读取的字节数
7)函数u8 send(u16 handle,u8 *rec_buff,u16 len,u16 i)
向指定句柄发送数据,由TCP使用
1.u16 handle--指定句柄
2.u8 * rec_buff—缓冲区首地址
3.u16 len—发送数据的长度
4.u16 i--无意义,保留为扩充功能使用。
5.返回值:是SUCC
8)void close(u16 handle)
发送FIN主动关闭一个SOCKET连接,handle为被关闭连接的句柄。

9)函数u16 recvfrom(SOCKET *sock,u8 *rec_buff,u16 len,u8 i,struct sockaddr * address,u16 *addr_len)
从指定SOCKET *sock插口读取数据,由UDP使用,函数的参数具体情况如下:
1.SOCKET *sock --指向插口的指针
2.u8 * rec_buff—缓冲区首地址
3.u16 len—读取数据的长度
4.u16 i--无意义,保留为扩充功能使用。
5.返回值:为已读取的字节数

10)函数u16 sendto(SOCKET *sock,u8 *rec_buff,u16 len,u8 i,struct sockaddr * address,u16 *addr_len)
向从指定SOCKET *sock插口发送数据,由UDP使用,函数的参数具体情况如下:
1.SOCKET *sock,--指向插口的指针
2.u8 * rec_buff—缓冲区首地址
3.u16 len—发送数据的长度
4.u16 i--无意义,保留为扩充功能使用
5.返回值:为SUCC

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top