ZLG/IP 嵌入式TCP/IP 协议栈简要说明 - Read

ZLG/IP 嵌入式TCP/IP 协议栈简要说明 - Read ZLG/IP 嵌入式TCP/IP 协议栈简要说明 - Read

read.pudn.com
from read.pudn.com More from this publisher
26.02.2013 Views

广州周立功单片机发展有限公司 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 -

广州周立功单片机发展有限公司 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 -

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!