Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议...

65
Beijing Bocon Dynamic C 网络编程 ----低端嵌入式TCP/IP 接入

Transcript of Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议...

Page 1: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

Dynamic C 网络编程

----低端嵌入式TCP/IP接入

Page 2: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

系统结构—8位CPU上的嵌入系统

RTOS

应用程序

I/O控制应用

直接面向硬件的应用

TCP/IP库

文件系统

应用程序

BIOS 硬件驱动

Rabbit2000/3000硬件系统

Page 3: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

Dynamic C支持的协议• IP: Internet Protocol• TCP: Transmission

Control Protocol• UDP: User Datagram

Protocol• FTP: File Transfer

Protocol• TFTP: Trivial File

Transfer Protocol• IGMP (Internet Group

Management Protocol)• DNS: Domain Name

System

• ICMP: Internet Control Message Protocol

• PPP: Point to Point Protocol

• SMTP: Simple Mail Transfer Protocol

• HTTP: Hyper Text Transfer Protocol

• POP3: Post office Protocol, v3

• SNMP: Simple Network Management Protocol

Page 4: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP 与硬件(TCP/IP堆栈层次结构)

层次结构

Applications应用层

Packet Packet

Packet Packet

Packet

TCP UDP传输层

IP网络层

Hardware数据链路层

(网络访问层)

http://www.ietf.org/rfc/

Page 5: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议网络层访问层传输协议

• Ethernet• PPP over serial link

(点对点协议:拨号上网…)• PPPoE ( PPP over Ethernet: ADSL…)• SLIP (串行线Internet协议): 只支持异步通

讯、无错误监测、占用专用线路

• X.25• 卫星链路

Page 6: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

以太网中TCP/IP 堆栈配置(7.30以前)

• pd_getaddress() 读出MAC地址

• 宏MY_IP_ADDRESS

• 宏MY_NETMASK

• 宏MY_GATEWAY

• 宏MY_NAMESERVER

• tcpconfig

• sethostid()

• sethostname()

Page 7: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

点对点(PPP)协议三个组成部分

• 封装串行链路上的数据报• 建立、配置和测试数据链路连接的链路控制协议(Link Control Protocol,LCP)

• 建立和配置不同网络层的网路控制协议(Network Control Protocol,NCP)

Page 8: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

PPP连接中TCP/IP 堆栈配置(7.30以前)

程序使用 #define PKTDRV "ppp.lib" PPP链路的建立• AT得到载波连接• 建立PPP连接。依次调用:

sock_init();PPPinit(Serial baud);PPPflowcontrolOn();PPPstart( 超时时间, 重试次数 );

Page 9: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

PPP封装--IPCP协议

功用:IP控制协议(IP Control Protocol)是IP的NCP功用:配置、启用和禁用IP协议使用:可以依据IPCP的状态判别PPP链路的状态

Page 10: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

PPPoE连接中TCP/IP 堆栈配置(7.30以前)

程序使用 #define PKTDRV "ppp.lib" PPP链路的建立• sock_init();

PPPinit( Serial Baud );PPPsetAuthenticatee(PAP Name, PAPPassword);

Page 11: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

• 宏TCPCONFIG

• #define IFCONFIG_ETH0 \IFS_IPADDR, aton(“10.10.6.100”), \IFS_NETMASK, aton(“255.255.255.0”), \IFS_ROUTER_SET, aton(“10.10.6.1”), \IFS_UP

• 含DHCP:#define USE_DHCP

#define IFCONFIG_ETH0 IFS_DHCP, IFS_UP

#use “dcrtcp.lib”或 #define TCPCONFIG 3

#use “dcrtcp.lib”

TCP/IP 堆栈配置(7.30以后)

Page 12: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP 堆栈配置(7.30以后)

• USING_ETHERNET

• USING_PPP_SERIAL

0x01 (serial port A)

0x02 (serial port B)

0x04 (serial port C)

0x08 (serial port D)

或对应位

• USING_PPPOE

• tcp_tick() 处理正常后台堆栈维护

消耗时间:正常处理<1ms 正常包处理<101ms

堆栈异常处理<102ms

Page 13: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议网络层协议

IP协议• 最大65535bytes数据包

• IP地址

A类(001~126,10开始为保留地址)

B类(128~191,172.16至172.31为保留地址)

C类(192~223,192.168为保留地址)

D类(224~239,只适用于组播方式)

E类(240~255,保留)

Page 14: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议

网络层协议—ARP协议简介

地址解析协议(ARP)• 功用:把更高层协议地址(IP地址)转换为物理网络地址

• 使用:IEEE802网络中使用。• 工作模式:

1、首先查找ARP缓存中的表来转换地址。2、如未找到则使用ARP请求格式发送广播请求。相应主机识别该请求中的IP地址则发送应答包。

Page 15: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议

网络层协议—ARP协议应用和实现

• 使用ARP.LIB中的相应函数以便Debug• Dynamic C中ARP为非拥塞工作模式。不会阻碍应用程序但会增加程序负载和延迟时间

• 使用有关宏配置

Page 16: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议

网络层协议—BOOTP协议简介

引导程序协议(Bootstrap Protocol)• 功用:使客户工作站能使用最小的IP堆栈进行初始化并向

BOOTP服务器请求配置• 使用:服务器和客户需要在相同LAN网段中;在网桥连接的网段上使用;如路由器有BOOTP转发功能,也可以在子网上使用BOOTP;通常使用TFTP下载引导程序

• 工作模式:1、客户确定硬件地址并在Port 67使用UDP包发送到服务器(如不知道服务器地址则使用广播);

2、服务器在Port 68 相应BOOTP请求

Page 17: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议

网络层协议—DHCP协议简介

动态主机配置协议(Dynamic Host Configuration Protocol)• 功用:提供一个把配置信息传递到TCP/IP网络主机上的框架。基于BOOTP协议,增加了自动分配可重用网络地址的能力和额外的配置选项

• 使用:自动分配(分配永久地址)、动态分配(分配有限时期内有效的地址。此类地址称为租用地址:Lease Address)、手动分配(管理员分配)

• 工作模式:1、客户在Port 67 广播请求并置自身为DHCP初试状态;2、服务器在Port 68 相应请求;3、客户选择相应配置并通知服务器(客户可以续租原有地址);4、服务器绑定该配置到记录中。客户再次确认配置;

Page 18: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议

网络层协议—BOOTP/DHCP协议使用

• BOOTP/DHCP配置宏• BOOTP/DHCP全局变量

\Samples\tcpip\DHCP.C

Page 19: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议

网络层协议--ICMP协议应用和实现

ICMP协议(网际控制报文协议)

• Ping的使用(Packet Inter-networking Grouping)

测试主机活动/非活动、sock_init()、tcp_tick(NULL)• Ping测试往返时间RTT

(samples\tcpip\icmp\pingyou.c)

1M0.61.25M10Base-T 局域网

150K4187KPPPoE 1.5Mbit DSL

500012057600PPP 8N1(57.6K)

吞吐量RTT带宽

Samples\tcpip\ping.c

Page 20: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议网络层协议—IGMP协议应用和实现

IPv4组播IGMP (Internet Group Management Protocol)

IGMPv2:增加显示组离开消息,以便清理组播树

支持函数:multicast_joingroup()、multicast_leavegroup()

支持宏:USE_MULTICAST、USE_IGMP(版本选择)、IGMP_V1_ROUTER_PRESENT_TIMEOUTIGMP_UNSOLICITED_REPORT_INTERVAL

\samples\tcpip\Multicast.c

Page 21: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议常用端口说明

• Port 7 Echo• Port 13 Daytime• Port 20 FTP-Data• Port 21 FTP• Port 23 Telnet• Port 25 SMTP• Port 53 DNS• Port 67 BOOTPS• Port 68 BOOTPC

• Port 69 TFTP• Port 80 HTTP• Port 110 POP3• Port 161 SNMP• Port162 SNMPTRAP

<1024为公有端口1024~65535 为临时端口,可用于应用程序

Page 22: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议传输层--UDP协议简介

用户数据报协议(User Datagram Protocol)• 功用:利用IP中的服务,提供应用程序中数据报的发送到另一个应用程序的机制

• 使用:无连接、不提供纠错和重传,如分段数据报的任何部分在传输期间丢失或混乱则整个数据分组放弃。更适合小的独立信息分组

• 工作模式:一次性网络服务,所有通讯涉及单个数据报。

发送节点:发送数据报后,套接被删除

目标节点:收到数据后,套接被删除

Page 23: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议

传输层--UDP协议应用

UDP是重要的轻量级网络传输协议:• 多媒体流:注重速度。数据流为单向的。如偶然丢失数据报,则纠错协议可以补偿。偶然丢失一个分组是可以接受的。

• 网络发现服务:广播查询网络主机,每个主机用UDP数据报相应所提供服务的信息

• 控制服务:如服务器定期“存活”信息• 基本信息服务:此类服务不需要会话,可以调用服务以取得服务(如时间服务)

Page 24: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议传输层--TCP协议简介

传输控制协议(Transmission Control Protocol)• 功用:提供可靠的分组送达和虚拟连接服务• 使用:协议通过以TCP分段模式对数据进行分组以传送流型数据、使用传输序号保证传输报文重传、删除和重排、采用窗口重传机制、使用多端口实现多路服用

• 工作模式:逻辑连接工作协议维护连接的状态信息(端口号、序号、窗口

大小)

Page 25: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议传输层--TCP协议应用

TCP状态机的应用:• 等待初始化• 等待连接• 连接和传输状态• 等待关闭

Page 26: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议

Dynamic C中传输层协议实现

• 提供udp_Socket和tcp_Socket数据类型• 提供Socket控制函数、状态函数和I/O函数• 根据需求自建数据处理函数(可由不同事件激活,

Dynamic C TCP/IP用户手册3.11 Table2 )

Page 27: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议传输层--UDP协议实现

• 配置函数:sock_mode设置校验或非校验

• 控制函数:udp_close、udp_extopen、udp_open

• 状态函数:sock_bytesready、sock_dataready、sock_rbleft、

sock_rbsize、 sock_rbused、 udp_peek• I/O函数:

udp_recv、udp_recvfrom、udp_send、 udp_sendto

Page 28: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议传输层--UDP协议使用实例

• \Samples\tcpip\udp\udp_srv.cUDP接受端

• \Samples\tcpip\udp\udp_cli.cUDP发送端

• \Samples\tcpip\udp\udp_echo_dh.c用户自定义数据处理函数

int my_data_handler(int event,void * socket,ll_Gather * g,void * info);

Page 29: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议传输层--TCP协议实现

• 控制函数:sock_abort 、 tcp_extlisten、sock_close、tcp_extopen、sock_flush 、 tcp_listen、sock_flushnext、tcp_open

• 状态函数:sock_alive 、sock_rbsize、sock_bytesready、sock_rbused、sock_dataready、sock_tbleft、sock_established、sock_tbsize、sock_iface、sock_tbused、sock_rbleft、tcp_tick

Page 30: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议传输层--TCP协议实现

• I/O函数:sock_aread、 sock_preread、sock_awrite、 sock_putc、sock_axread、 sock_puts、sock_axwrite、 sock_read、sock_fastread、sock_write、sock_fastwrite、sock_xfastread、sock_getc、 sock_xfastwrite、sock_gets

Page 31: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议传输层--TCP协议使用实例

• \Samples\tcpip\Active.cTCP客户端

• \Samples\tcpip\Echo.cTCP服务端

• \Samples\tcpip\tcp_status.cTCP服务端非拥塞状态机处理

Page 32: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议在多任务环境中的使用

• µC/OS-II中的使用ucos.lib在dcrtcp.lib前申明

sock_init()在OSInit()前调用

需要定义MAX_SOCKET_LOCKS

包含TCP/IP的任务的至少堆栈需要2K

· 在Dynamic C的协作多任务中的使用

必须使用非拥塞函数

Page 33: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--DNS简介

数据库

用户程序完全解析器

查询 查询缓存

域名服务器相应 相应

缓存相应 查询

外部域名服务器

Page 34: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--DNS实现与使用

• 拥塞式使用resolve( )\samples\tcpip\dns\dns.c

• 非拥塞式使用resolve_name_start( )resolve_name_check( )resolve_cancel( )\samples\tcpip\dns\dns2.c

Page 35: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--HTTP简介

• 功用: WWW(World Wide Web)协议基本使用HTTP( Hypertext Transfer Protocol )

• 使用:无状态协议,不跟踪连接,仅要求一种可靠的连接,可以打开多个连接

• 工作模式:基于请求-相应活动1、浏览器打开一个连接;2、浏览器发送一个请求到服务器;3、服务器发送一个相应给浏览器;4、关闭连接

Page 36: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--HTTP简介cookie

Cookie是在一个HTTP事务期间在一个客户端Web浏览器和一个Web服务器间交换的信息集

• 一个cookie为4K• Cookie被保存在独立的文件中放置在浏览器的目录中

• Cookie只跟踪HTTP连接的某种状态,保密的客户端认证和服务由安全套接字层( Secure Socket Layer, SSL ) 提供

Page 37: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--Web内容(Dynamic C中涉及)

• 静态内容HTML (Hypertext Markup Language);XML (Extensible Markup Language):描述一类保存在计算机上的文档数据对象,并部分描述了处理该类对象的程序行为

• 客户端动态内容Java Applet 和 ActiveX;脚本语言( JavaScript 和 VBScript)

• 服务器端动态内容CGI (Common Gateway Interface):可以调用服务器端中提供的特定程序;

SSI (Server-side include):将一个HTML的一部分转换为一个替代的动态部分。文件扩展名为.shtml

Page 38: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--HTTP Server的实现

Dynamic C中构建了zserver.lib以一定数据结构及其控制函数实现HTTP Server和FTP Server:

• Data Structure:ServerSprc(FormVar):可传输对象列表ServerAuth:用户列表

• Constants:以上结构体中的参数和下面函数的返回值;数据类型定义;服务器类型定义和参数

• Functions:对以上结构体的设定、修改和读取参数

Page 39: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--HTTP Server的架构

HTTP Server程序基本架构:#use "dcrtcp.lib"#use "http.lib"main(){ sock_init();

http_init();tcp_reserveport(80);while (1) {

http_handler();}

}

Page 40: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--HTTP Server的内容

• 应用程序处理Http消息• 使用HTTP.LIB的http_handler( )

HttpSpec: Web server提供的文件、变量和函数。既可在程序开始前静态说明也可在运行时动态修改

HttpType: 处理文件的连接类型HttpRealm: HttpSpec中的需认证的资源域HttpState: CGI函数接口

Page 41: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--HTTP Server静态页面实例

#ximport "samples/tcpip/http/pages/static.html" index_html#ximport "samples/tcpip/http/pages/rabbit1.gif" rabbit1_gifconst HttpType http_types[] ={

{ ".html", "text/html", NULL},{ ".gif", "image/gif", NULL}

};const HttpSpec http_flashspec[] = { { HTTPSPEC_FILE, "/", index_html, NULL, 0, NULL, NULL},

{ HTTPSPEC_FILE, "/index.html", index_html, NULL, 0, NULL, NULL},

{ HTTPSPEC_FILE, "/rabbit1.gif", rabbit1_gif, NULL, 0, NULL, NULL},};

Page 42: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--HTTP Server含SSI动态页面实例

const HttpType http_types[] ={ { ".shtml", "text/html", shtml_handler}, // ssi

{ ".html", "text/html", NULL}, // html{ ".cgi", "", NULL}, // cgi{ ".gif", "image/gif", NULL}};

long counter;const HttpSpec http_flashspec[] = {{HTTPSPEC_FILE,"/",index_html,NULL, 0, NULL, NULL},{HTTPSPEC_FILE,"/index.shtml", index_html,NULL, 0,

NULL, NULL},{HTTPSPEC_VARIABLE, "counter", 0, &counter, INT32,

"%ld", NULL}};

Page 43: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--HTTP Server含CGI页面实例

const HttpSpec http_flashspec[] = { { HTTPSPEC_FILE, "/", index_html, NULL, 0, NULL, NULL},

{ HTTPSPEC_FILE, "/index.html", index_html, NULL, 0, NULL, NULL},{ HTTPSPEC_FILE, "/rabbit1.gif", rabbit1_gif, NULL, 0, NULL, NULL},{ HTTPSPEC_FUNCTION, "/test.cgi", 0, test_cgi, 0, NULL, NULL}};

int test_cgi(HttpState* state){ static char date[20];

static char buffer[256];static int hitcount;#GLOBAL_INIT { hitcount=0; }hitcount++;http_date_str(date);sprintf(buffer,teststr,date,hitcount,REDIRECTTO);cgi_sendstring(state,buffer);

return 0;}

Page 44: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--HTTP Server含Java Applet页面实例

\samples\BL2000\Applet\dac-ctrl.c• 文件载入#ximport “×××.class" ×××_class• 对Java文件的说明

const HttpType http_types[] ={ { ".class", "application/octet-stream", NULL} };

• 使用中的注意:Java类的版本的兼容性Java Applet的安全性与认证

Page 45: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--HTTP Server含XML解析实例

\samples\OP7200\tcpip\flash_XML.c• #ximport “XXX.swf“ XXX_swf• 对含XML文件的说明:const HttpType http_types[] = {

{ ".swf", "application/x-shockwave-flash", NULL}};• 使用中注意:需要用户自解析XML文档种数据需要在80端口提供Web服务和自定义端口提供传输层服务

Page 46: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--FTP简介

文件传输协议( File Transfer Protocol)• 功用:客户和服务器间的双向文件传输• 使用:使用TCP提供的可靠的端到端连接,Port 20用于注册,并遵循Telnet协议、Port 21用于管理数据传输

• 工作模式:为C/S结构。应用基于一个协议解释器(Protocol Interpreter)、一个数据传输进程(Data Transfer Process)和一个用户接口

FTP用户接口用户

PI用户

DTP用户

控制连接PI服务器

数据连接DTP服务器文件系统 文件系统

客户系统 服务器系统

Page 47: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--FTP Server的内容及权限

由Zserver.lib中的API函数实现:• 文件服务的管理• 访问权限的管理• \samples\tcpip\ftp\ftp_server.c由FTP_Server.lib实现FTP服务端的连接• 配置宏• 处理函数ftp_tick()和ftp_init()等• 命令相应及其返回代码

Page 48: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--FTP Server的架构

FTP Server程序基本架构:#memmap xmem#use "dcrtcp.lib"#use "ftp_server.lib“void main(){

ftp_set_anonymous(user);sspec_setuser(file, user);sock_init();ftp_init(NULL); tcp_reserveport(FTP_CMDPORT); // Port 21while(1) {

ftp_tick();}

}

Page 49: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--FTP Client的实现

由FTP_Client.lib实现FTP服务端的连接• 每次处理一个FTP Client连接• 上载或下载在Root Memory中的一个静态缓冲区或使用用户自定义的数据处理函数

• 支持被动传输模式以避免防火墙的阻隔• 配置宏• 相应的API函数

Page 50: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--FTP Client的架构

FTP Client程序基本架构:#define PASSIVE_FLAG FTP_MODE_PASSIVE#memmap xmem#use "dcrtcp.lib"#use "ftp_client.lib“int main(){ sock_init();

ftp_init(NULL); /* use default handlers */tcp_reserveport(FTP_CMDPORT); // Port 21 ftp_client_setup(IP, PORT, USERNAME,

PASSWORD, MODE, FILE,DIR,buf,sizeof(buf));

while( 0 == (retval = ftp_client_tick()) );}

Page 51: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--TFTP 简介

普通文件传输协议( Trivial File Transfer Protocol)

• 功用:简单的文件传输协议,用于某些设备在启动时使用该协议下载固件

• 使用:实现于UDP之上,无用户认证的从服务器读取文件或把数据写入服务器

• 工作模式:首先通过Port 69发送读写请求服务器和客户确定用于其余连接的端口

Page 52: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--TFTP Server的实现

TFTP自身简洁的特性可以在UDP中可以实现TFTP状态机\samples\tcpip\tftp\tftp.c

while(tcp_tick(&tftpsock)) {retval = udp_recvfrom(&tftpsock, pbuf, PBUF_LEN, &remoteip, &remoteport);switch(pbuf[1]) {

case 1: “Read request received for file “case 2: “Write request received for file “case 4: “ACK was received“default: “Bad opcode was received” }udp_close(&tftpsock);if(open_udp_sock(0)) return 0;

}

Page 53: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--TFTP Client的实现

由tftp.lib实现TFTP所需的数据结构和API函数:• 结构体struct tftp_state• 配置宏• API函数

Page 54: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--TFTP Client的架构

\samples\tcpip\tftp\tftpclnt.c#memmap xmem#use "dcrtcp.lib"#use "tftp.lib“int main(){

struct tftp_state ts;sock_init();设置ts;tftp_init(&ts);while ((status = tftp_tick(&ts)) > 0);}

Page 55: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--SMTP简介

简单邮件传输协议( Simple Mail Transfer Protocol)• 功用:从一台服务器向另一服务器传送邮件消息的协议,广泛用于从客户机向邮件服务器发送邮件消息

• 使用:使用TCP的Port 25,基于端到端的传送,SMTP仅保证传送到邮件网关主机

• 工作模式:1、通过请求/相应对话建立与SMTP服务器的连接;2、客户机发送消息产生者和接受者的邮件地址;3、如服务器接受邮件地址,则客户机发送消息

Page 56: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层--SMTP Client实现架构

由smtp.lib提供API函数#memmap xmem#use dcrtcp.lib#use smtp.libvoid main(){

sock_init();smtp_sendmail(TO, FROM, SUBJECT, BODY);//或使用smtp_sendmailxmem()while(smtp_mailtick()==SMTP_PENDING);

}

Page 57: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层-- POP3简介

邮局协议( Post Office Protocol version 3)• 功用:同时具有客户(发送方\接收方)和服务器(存储器)功能的电子邮件协议

• 使用:客户使用Port 110建立与服务器的TCP连接。支持电子邮件的基本检索功能(下载和删除)

• 工作模式:1、建立连接 2、认证阶段3、事务阶段 4、更新阶段

Page 58: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层-- POP3 Client实现架构

由Pop3.lib提供API函数和配置宏#memmap xmem#use "dcrtcp.lib"#use "pop3.lib“int storemsg(int num, char *buf, int len){…}void main(){ sock_init();

pop3_init(storemsg);//定义#define POP_PARSE_EXTRA时处理函数为storemsg(int num, char *to, char *from, char *subject, char *body, int len);pop3_getmail(POP_USER, POP_PASS, address);while((retval = pop3_tick()) == POP_PENDING)continue;}

Page 59: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层-- SNMP简介

简单网管协议( Simple Network Management Protocol)

• 功用:控制和监视连接网络的设备• 使用:基于管理/代理机制、通常使用UDP,不保证数据可靠到达、使用Port 161和162

• 工作模式:Network

ManagementApplication

SNMP

MIB MIB

SNMP

Client

ManagementAgent

ManagementAgentServer Server

Page 60: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层-- SNMP中的SMI和MIB

管理信息结构和管理信息标识(Structure for Management Information)

• 定义如何描述被管理的对象的规则,以及管理协议如何访问被管理对象

• 对象包括字段:名称(描述符和标识符)、类型语法、定义描述、访问权限和状态

管理信息库(Management Information Base)• RFC1213描述MIB-II

Page 61: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层-- SNMP Agent实现

由snmp.lib实现配置宏和API函数• \samples\tcpip\snmp\snmp.c由mib.lib实现MIB的管理• \samples\tcpip\snmp\mibtest.c

Page 62: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层-- Telnet简介

远程通讯网协议(Telecommunications Network)

• 功用:用于终端仿真,提供互交式的基于字符会话

• 使用:Port 23,使用TCP协议

Page 63: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层-- Telnet实现

Telnet服务• 在Port 23上的TCP Server,提供服务可由用户定制

• \samples\tcpip\telnet\rxsample.cTelnet-串口的数据网关• 由Vserial.lib提供配置宏和API函数• \samples\tcpip\telnet\vserial.c

Page 64: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

TCP/IP各个层协议应用层-- Telnet-串口数据网关的实现

#use "dcrtcp.lib"#use "vserial.lib"const VSerialSpec VSerialSpecTable[] = {

VSERIAL_PORTX(GATEWAY_PORTX)};void main(){ sock_init();

vserial_init();vserial_listen(GATEWAY_PORTX,Baud,23,0L,VSERIAL_COOKED);vserial_keepalive(GATEWAY_PORTX, timeout);for(;;) {

vserial_tick();}

}

Page 65: Dynamic C 网络编程 · 2020. 5. 12. · Beijing Bocon TCP/IP各个层协议 网络层协议 IP协议 • 最大65535bytes数据包 •IP地址 A类(001~126,10开始为保留地址)

Beijing Bocon

best regardsRabbit大中华区总代理:上海爱拜丁电子发展有限公司总部地址:上海市长宁区299弄富都花园A座10B 邮政编码:200050联系人:任生电话:021-28578851,021-62404003 传真:021-62407061 电邮:[email protected] 网址:http://www.ylib.cnMSN :[email protected]