ZLG/IP 嵌入式TCP/IP 协议栈简要说明 - Read
ZLG/IP 嵌入式TCP/IP 协议栈简要说明 - Read ZLG/IP 嵌入式TCP/IP 协议栈简要说明 - Read
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 ZLG/IP 嵌入式 TCP/IP 协议栈简要说明 TCP/IP 协议和以太网协议是使用最广泛的通讯协议,而基于底层的以太网协议的实现就 由以太网控制器来负责了,目前比较常用的嵌入式以太网控制芯片有 RTL8019AS、CS8900 等,我们先以 RTL8019AS 为例子介绍以太网的控制芯片。 1 RTL8019AS 简介 RTL8019AS 是一种高度集成的以太网控制芯片,能简单的实现 Plug and Play 并兼容 NE2000、掉电等特性。在全双工模式下,如果是连接到一个同样是全双工的交换机或集线 器,就可实现同时接收和发送。这个特性虽然不能把传输速率从 10Mbps 提高到 20Mbps, 但是在执行以太网 CSMA/CD 协议时,可以避免更多的冲突的发生。而 Microsoft's Plug and Play 功能就可以为用户减轻对资源配置的烦恼(如 IRQ 、I/O address 等)。又或者是在一些 特殊的场合,为了对一些不支持 Microsoft's Plug and Play 的器件的兼容,RTL8091AS 还可 以选择跳线模式或非跳线模式。 � 支持 PnP 自动检测模式; � 支持 Ethernet II 和 IEEE802.3 10Base5, 10Base2, 10BaseT; � 软件兼容 8 位或 16 位的 NE2000 模式; � 支持跳线和非跳线模式; � 支持在非跳线模式下的 Microsoft‘s Plug and Play 配置; � 支持在全双工模式下的双倍信道带宽; � 支持 UTP、AUI 、BNC 的自动检测 � 在 10BaseT 下支持自动极性修正 � 支持 8 路中断请求(IRQ) � 支持 16 位 I/O 地址 � 内建 16K SRAM � 支持四盏可编程诊断 LED RTL8019AS 管脚排列及内部功能框图如图 1 所示。 - 1 -
- Page 2 and 3: 广州周立功单片机发展有
- Page 4 and 5: 广州周立功单片机发展有
- Page 6 and 7: 广州周立功单片机发展有
- Page 8 and 9: 广州周立功单片机发展有
- Page 10: 广州周立功单片机发展有
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925<br />
<strong>ZLG</strong>/<strong>IP</strong> 嵌入式 TCP/<strong>IP</strong> <strong>协议栈简要说明</strong><br />
TCP/<strong>IP</strong> 协议和以太网协议是使用最广泛的通讯协议,而基于底层的以太网协议的实现就<br />
由以太网控制器来负责了,目前比较常用的嵌入式以太网控制芯片有 RTL8019AS、CS8900<br />
等,我们先以 RTL8019AS 为例子介绍以太网的控制芯片。<br />
1 RTL8019AS 简介<br />
RTL8019AS 是一种高度集成的以太网控制芯片,能简单的实现 Plug and Play 并兼容<br />
NE2000、掉电等特性。在全双工模式下,如果是连接到一个同样是全双工的交换机或集线<br />
器,就可实现同时接收和发送。这个特性虽然不能把传输速率从 10Mbps 提高到 20Mbps,<br />
但是在执行以太网 CSMA/CD 协议时,可以避免更多的冲突的发生。而 Microsoft's Plug and<br />
Play 功能就可以为用户减轻对资源配置的烦恼(如 IRQ 、I/O address 等)。又或者是在一些<br />
特殊的场合,为了对一些不支持 Microsoft's Plug and Play 的器件的兼容,RTL8091AS 还可<br />
以选择跳线模式或非跳线模式。<br />
� 支持 PnP 自动检测模式;<br />
� 支持 Ethernet II 和 IEEE802.3 10Base5, 10Base2, 10BaseT;<br />
� 软件兼容 8 位或 16 位的 NE2000 模式;<br />
� 支持跳线和非跳线模式;<br />
� 支持在非跳线模式下的 Microsoft‘s Plug and Play 配置;<br />
� 支持在全双工模式下的双倍信道带宽;<br />
� 支持 UTP、AUI 、BNC 的自动检测<br />
� 在 10BaseT 下支持自动极性修正<br />
� 支持 8 路中断请求(IRQ)<br />
� 支持 16 位 I/O 地址<br />
� 内建 16K SRAM<br />
� 支持四盏可编程诊断 LED<br />
RTL8019AS 管脚排列及内部功能框图如图 1 所示。<br />
- 1 -
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925<br />
网络数据<br />
远程地址<br />
本地地址<br />
FIFO ISA总线接口<br />
本地DMA<br />
远程DMA<br />
16K SRAM<br />
本地总线<br />
数据发送<br />
图 1 RTL8019AS 管脚排列及内部功能框图<br />
系统I/O端口<br />
16位<br />
16位/8位<br />
如图 1 所示,RTL8019AS 芯片内部集成了 DMA 控制器、ISA 总线控制器和集成 16K<br />
SRAM、网络 PHY 收发器。用户可以通过 DMA 方式把需要发送的数据写入片内 SRAM 中,让<br />
芯片自动将数据发送出去;而芯片在接收到数据后,用户也可以通过 DMA 方式将其读出。<br />
RTL8019AS 的详细介绍请见 RTL8019AS 数据手册。<br />
明白了 RTL8019AS 所提供的资源与硬件接口,便可以设计 RTL8019AS 与 LPC2200 的<br />
硬件电路了。<br />
2 RTL8019AS 与 LPC2200 的硬件电路设计<br />
RTL8019AS 与 LPC2200 一般通过外部总线进行连接。我们假设 RTL8019AS 与 LPC2200<br />
的连接关系如表 1 所示。<br />
表 1 RTL8019AS 与 LPC2200 连接关系<br />
RTL8019AS 功 能 LPC2200<br />
SD0 ~ SD15 RTL8019AS 数据总线 D0 ~ D15<br />
SA0~SA4 RTL8019AS 地址总线 A1~A5<br />
SA8 RTL8019AS 地址总线 A22<br />
SA5 RTL8019AS 地址总线 nCS2<br />
IORB RTL8019AS 读使能(低电平有效) nOE<br />
IOWB RTL8019AS 写使能(低电平有效) nEW<br />
INT0 RTL8019AS 中断输出信号 INT_N(P0.7)<br />
RSTDRV RTL8019AS 复位输入信号 NET_RST(P0.6)<br />
由以上关系,可知 RTL8019AS使用 LPC2200 外部存储控制的 Bank2 部分,而 RTL8019AS<br />
的 IO 地址为 0X00300~0X0031F,所以 RTL8019AS 在 SA8=1;SA5=0 的时候选通,其地址如<br />
下:<br />
数据地址 0x83400000~0x83400001F<br />
- 2 -
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925<br />
断。<br />
NET_RST 为 LPC2200 输出引脚,RTL8019AS 中断信号为中断输入信号,且为外部中<br />
RTL8019AS 的 SD0~SD15 串了一个 470 欧姆电阻连接到 LPC2200 的 D0~D15。<br />
3 <strong>ZLG</strong>/<strong>IP</strong> 概述<br />
3.1 <strong>ZLG</strong>/<strong>IP</strong> 简介<br />
<strong>ZLG</strong>/<strong>IP</strong> 是广州周立功单片机发展有限公司开发的面向嵌入式系统开发的 TCP/<strong>IP</strong> 协议<br />
栈,是 <strong>ZLG</strong> 系列中间件的重要成员之一。<strong>ZLG</strong>/<strong>IP</strong> 提供实现 Internet 网络上 <strong>IP</strong> 接点的功能,<br />
是个高性能的嵌入式 TCP/<strong>IP</strong> 协议栈软件。它使用µC/OS-II 实时操作系统的信号机制来实现<br />
一个多任务并行并可重入的协议栈,完全使用 ANSI C 进行编写,可以象µC/OS-II 那样支持<br />
多种 CPU。<strong>ZLG</strong>/<strong>IP</strong> 还具有层次清晰,易于升级和修改等特点。目前,<strong>ZLG</strong>/<strong>IP</strong> 的最新版本为<br />
1.0。<br />
3.2 <strong>ZLG</strong>/<strong>IP</strong> 的特点<br />
� Socket 库兼容 BSD 标准<br />
<strong>ZLG</strong>/<strong>IP</strong> 带有 Socket API 接口函数,方便用户进行应用层协议的开发。<br />
� 可移植<br />
全部代码由 ANSI C 编写,并且与目标处理器的存储器结构无关(即与无论存储器<br />
是大端结构还是小端结构均不影响程序的执行),方便用户移植到自己的目标系统<br />
中。<br />
� 可固化<br />
<strong>ZLG</strong>/<strong>IP</strong> 为嵌入系统设计,如果您有固化手段,它可以嵌入到您的产品中成为产品的<br />
一部分。<br />
� 支持多任务操作系统<br />
基于µC/OS-II 实时多任务操作系统,具有良好的实时性能,所有 Socket API 接口函<br />
数库都可以工作在非阻塞方式。<br />
� 为嵌入系统做过优化<br />
代码可重入, 简易的路由协议处理,可以跨越网关收发数据, 支持 RFC 标准 TCP,<br />
TCP 层代码小而且速度快。<br />
� 提供源代码<br />
需要购买源码的用户可以与广州周立功单片机发展有限公司联系。<br />
� 可配置<br />
得到源码的用户可以对一些参数进行配置或裁减代码。<br />
� 基本完整的 TCP 栈支持,TCP 模块处理支持以下功能:<br />
(1) 发送确认;<br />
(2) 带外数据;<br />
(3) 数据重传;<br />
(4) 数据校验;<br />
(5) 流模式;<br />
(6) 连接数目只受内存大小限制。<br />
3.3 已实现的特性<br />
� 支持 TCP, UDP, <strong>IP</strong>, ICMP, ARP, ETHERNET 等协议;<br />
� 兼容 BSD 标准的 Socket API 接口函数库;<br />
� ICMP 实现 PING 的功能和 UDP 无效端口返回;<br />
- 3 -
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925<br />
� 支持 TCP 的流控制和超时重传;<br />
� 支持 TCP 主动连接和被动连接;<br />
� 支持在多任务中建立多个不同的 TCP 连接,支持各连接同时收发数据;<br />
� 提供 WebSever 和 UDP 服务器范例。<br />
3.4 暂时未实现的特性<br />
� <strong>IP</strong> 报的处理不支持分段<br />
在多个网络接口的应用是两个网络间的最大报大小要基本相等。<br />
� ICMP 协议还不是非常完整<br />
目前 ICMP 协议只支持 PING 的功能和 UDP 无效端口返回。<br />
� TCP 协议不支持紧急数据<br />
这一版本的 <strong>ZLG</strong>/<strong>IP</strong> 不对 TCP 传输中的紧急数据报进行处理。<br />
� 不支持 IGMP 协议<br />
这一版本的 <strong>ZLG</strong>/<strong>IP</strong> 不支持 <strong>IP</strong> 组播和广播。<br />
� 不支持 Socket API 发送函数发送大于 PMTU<br />
用 Socket API 发送函数发送数据时,数据长度不可大于一个 TCP 或 UDP 报有效数<br />
据的长度。<br />
<strong>ZLG</strong>/<strong>IP</strong> 的升级版将逐步解决上述问题。<br />
4 <strong>ZLG</strong>/<strong>IP</strong> 的结构视图<br />
4.1 概述<br />
<strong>ZLG</strong>/<strong>IP</strong> 采用模块化层次结构设计,其结构如图 2 所示。<br />
TCP/<strong>IP</strong>应用程序<br />
UDP<br />
处理<br />
SOCKET API 接口<br />
<strong>IP</strong>处理<br />
注释:(1) 实线箭头表示正常调用关系。<br />
TCP<br />
处理<br />
(2) 模块所在水平位置代表其所在的网络层次<br />
(3) 灰色模块表示操作系统中的任务。<br />
TCP/<strong>IP</strong>应用程序<br />
ICMP处理<br />
ARP处理<br />
<strong>IP</strong>发送<br />
ETHERNET接收驱动 ETHERNET发送驱动<br />
- 4 -<br />
网络硬件<br />
其它应用程序
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925<br />
4.2 应用程序<br />
图 2 <strong>ZLG</strong>/<strong>IP</strong> 逻辑结构图<br />
TCP/<strong>IP</strong> 应用程序是用户自己编写的µC/OS-II 任务,是 <strong>ZLG</strong>/<strong>IP</strong> 的使用者,位于整个程序<br />
的最高层。TCP/<strong>IP</strong> 应用程序调用 <strong>ZLG</strong>/<strong>IP</strong> 提供的 Socket API 接口函数对网络进行相应的操作。<br />
4.3 Socket API 接口<br />
位于 TCP/<strong>IP</strong> 协议与应用程序之间,是用户操作协议栈程序的工具,在应用程序中通过<br />
调用 Socket API 接口函数来对协议栈软件进行操作。<br />
4.4 TCP、UDP 处理<br />
是协议栈程序中处理传输层协议的模块。负责对传输层的数据进行封装和解拆,保存传<br />
输层连接状态。<br />
4.5 接收处理<br />
最大的灰框内部的就是接收处理。它包括 <strong>IP</strong> 报的处理,ARP 报的处理,ICMP 报的处<br />
理及以太网层的数据接收驱动。接收驱动模块接收到数据后进行分类,是 <strong>IP</strong> 报就 <strong>IP</strong> 由处理<br />
模块处理,是 ARP 报就进行 ARP 协议处理,是 ARP 请求报则调用以太网发送模块发送 ARP<br />
应答报。是 <strong>IP</strong> 处理模块把数据分类分别由 ICMP 处理模块处理,对 TCP 或 UDP 报则转由<br />
上层的传输层模块处理。而 ICMP 协议处理模块负责对 ICMP 协议进行。<br />
4.6 <strong>IP</strong> 发送<br />
负责封装 <strong>IP</strong> 报,并把封装好的 <strong>IP</strong> 报传送的下层发送模块。<strong>IP</strong> 发送模块有 4 个上层模块<br />
调用,分别是 Socket API 接口、UDP 处理、TCP 处理和 ICMP 处理,他们把相应的参数传<br />
送给 <strong>IP</strong> 发送模块,由 <strong>IP</strong> 发送模块来封装。<br />
4.7 以太网发送驱动<br />
它是属于以太网层的处理模块,负责封装以太网报和数据的发送。调用它的模块有 ARP<br />
处理模块和 <strong>IP</strong> 发送模块。<br />
5 Socket API 函数集<br />
5.1 系统配置手册<br />
功能 常量名<br />
ARP 表的表<br />
项数目<br />
TCP 报的最<br />
大数据长度<br />
数据<br />
TCP 的最大<br />
连接数<br />
本地 MAC<br />
地址<br />
表 2 <strong>ZLG</strong>/<strong>IP</strong> 配置<br />
取值范<br />
围<br />
所属文件 描述、注意点<br />
MAX_ARP_TERM 1~255 cfg_net.h 它于网络中的节点数有关,默认是 50<br />
MAX_TCP_DATA<br />
1~<br />
1460<br />
cfg_net.h<br />
它是指一帧 TCP 报可以发送的字节数,默<br />
认是 1460<br />
MAX_TCP_LINKS 1~255 cfg_net.h 同时可以建立的 TCP 连接数量<br />
My_Mac_1ID cfg_net.h 默认是 0x52,0x54,0x4c,0x19,0xf8,0x72<br />
本地 <strong>IP</strong> 掩码 <strong>IP</strong>_MARK_1ID cfg_net.h 默认是 255,255,255,0<br />
- 5 -
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925<br />
本地 <strong>IP</strong> 地址 MY_<strong>IP</strong>_1ID cfg_net.h 默认是 192.169.0.174<br />
本地网关地<br />
址<br />
系统的操作<br />
方式<br />
接收缓存区<br />
的数目<br />
MY_GATEWAY_1ID cfg_net.h 默认是 192.169.0.1<br />
Little_End cfg_net.h 分为大端(Big_End)和小端(Little_End)<br />
两种,它与 CPU 的类型有关,默认是小端<br />
MAX_REC_BUFF 1~255 Hardwear.<br />
h<br />
默认为 5<br />
网络接口数 MAX_NET_PORT 1~255 Ethernet.h 是指可以同时控制的以太网接口数目,默认<br />
UDP 接收缓<br />
存区的数目<br />
UDP 可建立<br />
的 SOCKET<br />
数<br />
以太网控制<br />
芯片的复位<br />
脚<br />
以太网控制<br />
芯片的基地<br />
址<br />
为 1<br />
UdpMaxRec 1~255 Udp.h 默认是 3<br />
MAX_UDP_LINKS 1~255 Udp.h<br />
NET_RST<br />
NET_BASE_ADDR<br />
5.2 SOCKET API 函数参考手册<br />
Hardwear.<br />
c<br />
Hardwear.<br />
c<br />
表 3 socket 函数<br />
它的数目是于 UDP 通讯的 SOCKET 数目有<br />
关,它等于 UDP 通讯的 SOCKET 数目就可<br />
以了,默认为 5<br />
复位脚的管脚号,它与硬件有关在<br />
EASY2200 板上是 P0.6 脚,所以<br />
NET_RST=0X00000040<br />
它与硬件有关在 EASY2200 板上是<br />
0X83400000<br />
函数名称 socket() 所属文件 zlg_socket.c<br />
函数原型 SOCKET *socket( uint16 af, uint16 type, uint16 protocol)<br />
功能描述 创建一个 SOCKET<br />
编译开关 无 调用者 用户任务<br />
函数参数 af:保留(0) type:通讯类型 protocol:通讯协议<br />
函数返回值 创建的 SOCKET 结构指针<br />
调用模块 无<br />
特殊说明和<br />
注意点<br />
必须先建立一个 SOCKET 结构;该函数可用于 TCP 或 UDP 通讯任务<br />
表 4 bind 函数<br />
函数名称 bind() 所属文件 zlg_socket.c<br />
函数原型 int bind( SOCKET * s, struct sockaddr * name,uint16 namelen)<br />
功能描述 对已创建的 SOCKET 绑定本地 <strong>IP</strong> 地址和本地端口<br />
编译开关 无 调用者 用户任务<br />
函数参数 s:已创建的 SOCKET 指针 name:保存 <strong>IP</strong> 地址和端口的结构 namelen:name 的长度<br />
函数返回值 通讯协议:0 为 TCP 通讯,1 为 UDP 通讯<br />
调用模块 无<br />
- 6 -
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925<br />
特殊说明和<br />
注意点<br />
如果调用本函数来绑定本地 <strong>IP</strong> 和本地端口,系统自动使用默认 <strong>IP</strong> 和一个空闲的端口; 该函<br />
数可用于 TCP 或 UDP 通讯任务<br />
表 5 listen 函数<br />
函数名称 listen() 所属文件 zlg_socket.c<br />
函数原型 int listen( SOCKET * s, uint16 backlog )<br />
功能描述 设定 TCP 服务器需要监听的连接数<br />
编译开关 无 调用者 用户的 TCP 服务器任务<br />
函数参数 s:已创建的 SOCKET 指针 backlog:需要监听的连接数<br />
函数返回<br />
值<br />
调用模块 无<br />
特殊说明<br />
和注意点<br />
-1:需要监听的连接数比最多可建立的连接数还大<br />
-2:backlog=0<br />
-3:已创建的 SOCKET 所使用的通讯协议不是 TCP 协议<br />
-4:需要监听的连接数比可建立的连接数还大<br />
backlog 的值:表示设定成功<br />
只适用于 TCP 连接<br />
表 6 accept 函数<br />
函数名称 accept() 所属文件 zlg_socket.c<br />
函数原型 uint8 accept( SOCKET * s, struct sockaddr * addr, int *addrlen )<br />
功能描述 用于 TCP 服务器确认客户机的连接<br />
编译开关 无 调用者 用户的 TCP 服务器任务<br />
函数参数 s:已创建的 SOCKET 指针 addr:连接后保存对方的 <strong>IP</strong> 和端口 addrlen:addr 的长度<br />
函数返回<br />
值<br />
调用模块 无<br />
特殊说明<br />
和注意点<br />
0xFF:没有客户机的连接<br />
返回值小于 MAX_TCP_LINKS:已经与客户机建立连接,返回值是“连接序号”<br />
只适用于 TCP 连接,本函数不阻塞,它属于超时退出。<br />
表 7 recv 函数<br />
函数名称 recv() 所属文件 zlg_socket.c<br />
函数原型 uint16 recv( uint8 num, uint8 *buf, uint16 len, int flags )<br />
功能描述 TCP 通讯连接建立后,读取所得到的数据。<br />
编译开关 无 调用者 用户的 TCP 任务<br />
函数参数 num:从 accept()(或 connect()函数)函数获取的 “连接序号”<br />
函数返回<br />
值<br />
buf:接收缓存区起始地址<br />
len:接收的数据长度<br />
flags:保留<br />
读取的数据长度,为 0 表示没有数据<br />
调用模块 OSTimeDly(10);<br />
- 7 -
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925<br />
特殊说明<br />
和注意点<br />
只适用于 TCP 连接,本函数不阻塞,它属于超时退出。<br />
表 8 send 函数<br />
函数名称 send() 所属文件 zlg_socket.c<br />
函数原型 uint16 send( uint8 num, uint8 *buf, uint16 len, int flags )<br />
功能描述 TCP 通讯连接建立后,发送数据。<br />
编译开关 无 调用者 用户的 TCP 任务<br />
函数参数 num:从 accept()(或 connect()函数)函数获取的 “连接序号”<br />
函数返回<br />
值<br />
buf:发送数据起始地址<br />
len:发送的数据长度(不可大于 MAX_TCP_DATA,MAX_TCP_DATA 默认是 1460 个字节)<br />
flags:保留<br />
发送的数据长度,为 0 表示发送失败<br />
调用模块 Send_Ip_Frame()<br />
特殊说明<br />
和注意点<br />
只适用于 TCP 连接,本函数不阻塞,超时重发一次,再超时退出。<br />
表 9 close 函数<br />
函数名称 close() 所属文件 zlg_socket.c<br />
函数原型 uint8 close(uint8 num)<br />
功能描述 关断 TCP 连接<br />
编译开关 无 调用者 用户的 TCP 任务<br />
函数参数 num:从 accept()函数(或 connect()函数)获取的 “连接序号”<br />
函数返回<br />
值<br />
1:正常断开<br />
0:非正常断开<br />
调用模块 Send_Ip_Frame()<br />
特殊说明<br />
和注意点<br />
只适用于 TCP 连接,本函数不阻塞,超时退出。<br />
表 10 connect 函数<br />
函数名称 connect() 所属文件 zlg_socket.c<br />
函数原型 uint8 connect(SOCKET * s, struct sockaddr * addr,uint16 addrlen)<br />
功能描述 用于 TCP 主动连接(一般是 TCP 客户端)<br />
编译开关 无 调用者 用户的 TCP 客户机<br />
函数参数 s:已创建的 SOCKET 指针 addr:对方 <strong>IP</strong> 地址和端口 addrlen:addr 的长度<br />
函数返回<br />
值<br />
< MAX_TCP_LINKS:返回创建的“连接序号”<br />
MAX_TCP_LINKS:连接失败返回 MAX_TCP_LINKS<br />
调用模块 Send_Ip_Frame()<br />
特殊说明<br />
和注意点<br />
只适用于 TCP 客户机连接,本函数不阻塞,超时退出。<br />
表 11 closesocket 函数<br />
- 8 -<br />
任务
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925<br />
函数名称 closesocket() 所属文件 zlg_socket.c<br />
函数原型 int closesocket( SOCKET s )<br />
功能描述 删除已建立的 SOCKET<br />
编译开关 无 调用者 用户任务<br />
函数参数 s:已创建的 SOCKET<br />
函数返回<br />
值<br />
调用模块 无<br />
特殊说明<br />
和注意点<br />
1:正确删除<br />
该函数可用于 TCP 或 UDP 通讯任务<br />
表 12 recvfrom 函数<br />
函数名称 recvfrom() 所属文件 zlg_socket.c<br />
函数原型 uint16 recvfrom( SOCKET s, uint8 *buf, uint16 len, int flags, struct sockaddr *from, uint16<br />
*fromlen )<br />
功能描述 用于 UDP 通讯时接收数据<br />
编译开关 无 调用者 用户 UDP 任务<br />
函数参数 s:已创建的 SOCKET<br />
函数返回<br />
值<br />
调用模块 无<br />
特殊说明<br />
和注意点<br />
buf:接收缓存区起始地址<br />
len:接收的数据长度<br />
flags:保留<br />
from:保存发送方的 <strong>IP</strong> 地址和端口<br />
fromlen:from 的长度<br />
接收到的数据的长度<br />
仅适用与 UDP 通讯,使用前必须先建立 SOCKET<br />
表 13 sendto 函数<br />
函数名称 sendto() 所属文件 zlg_socket.c<br />
函数原型 uint16 sendto( SOCKET s, uint8 *buf, uint16 len, int flags, struct sockaddr *to, uint16 tolen )<br />
功能描述 用于 UDP 通讯时发送数据<br />
编译开关 无 调用者 用户 UDP 任务<br />
函数参数 s:已创建的 SOCKET<br />
函数返回<br />
值<br />
调用模块 无<br />
buf:发送数据起始地址<br />
len:发送的数据长度(不大于以太网中的 UDP 最大数据 1478 个字节)<br />
flags:保留<br />
to:目标方的 <strong>IP</strong> 地址和端口<br />
tolen:to 的长度<br />
发送的数据的长度<br />
- 9 -
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925<br />
特殊说明<br />
和注意点<br />
仅适用与 UDP 通讯,使用前必须先建立 SOCKET<br />
- 10 -