基于SX单片机实现WebServer和网络协议栈

时间:2012-03-14来源:网络

TCP协议栈支持同时建立两个TCP连接:一个为主动连接,由TCPApp1Init()来控制;另一个为被动连接,由TCPApp2Init()来控制。TCP是基于连接的协议,因为必须保持对TCP连接状态的监视和状态有关的信息保存在发送控制块中;而TCP连接状态的改变由TCP的软件状态机来实现。软件状态机又由事件或用户来触发。比如,当监视到一个带有SYN标志的TCP包到达时,状态机就将TCP连接转换到接收状态;用户也可以手工控制状态机处于发送状态来建立TCP连接。

① 用TCP API来建立TCP被动连接

_TCPApp2Init
_bank TCB2_BANK
mov tcb2LocalPortLSB, #HTTP_PORT_LSB ;  设置TCP的服务端口
mov tcb2LocalPortMSB, #HTTP_PORT_MSB
bank HTTP_BANK
clr httpParseState
clr httpURIHash
setb flags2.TCP_SOCK ;  显示TCP2的连接状态
jmp @TCPAppPassiveOpen ;  跳转到TCP被动连接子程序,进行端口侦听
retp

② 用TCP API建立TCP主动连接
_TCPApp1Init
test switch ;  条件触发
sz
retp ;  没有触发,退出
_bank HTTP_BANK
mov w, #HTTP_CONNECT ;  启动HTTP状态机
mov httpState, w
_bank TCB1_BANK
mov tcb1LocalPortLSB, #80 ;  设置本机TCP连接服务端口
mov tcb1LocalPortMSB, #80
mov tcb1RemotePortLSB, #HTTP_PORT_LSB ;  设置远程主机TCP连接服务端口
mov tcb1RemotePortMSB, #HTTP_PORT_MSB
_bank TCPSOCKET_BANK
mov sock1RemoteIP3,#SMTP_SERVER_IP3 ;  设置远程主机的IP地址
mov sock1RemoteIP2,#SMTP_SERVER_IP2
mov sock1RemoteIP1,#SMTP_SERVER_IP1
mov sock1RemoteIP0,#SMTP_SERVER_IP0
clrb flags2.TCP_SOCK ;  显示TCP主动连接的状态
jmp @TCPAppActiveOpen ;  在指定的端口建立TCP连接
retp

③ 用TCP API发送数据和接收数据

一旦建立了TCP连接,那就只有两种情况:发送数据或接收数据。接收数据时,从IP层来的数据经过状态机去掉TCP包头后再送到应用层;发送数据时,软件状态机会在数据前面加上TCP包头再发送到IP层。

接收数据时,需要用到的TCP API函数为TCPAppRxBytes()、TCPAppRxData()和TCPAppRxDone();发送数据时,有一点值得关注:为了防止接收缓冲区的溢出,相对于发送数据包,协议栈给予接收数据包以更高的优先级。也就是说,协议栈软件会一直处理接收的数据包,直到接收缓冲区中没有任何数据。

发送数据时,需要用到的TCP API函数为TCPAppTxBytes()、TCPAppTxData()和TCPAppTxDone()。必须注意,只有在建立了TCP连接后,才可以发送数据。
 
3. 应用层

HTTP是WWW上的协议。当用户要浏览服务器上的一个网页时,一个HTTP 请求就会从用户的浏览器发到HTTP服务器。服务器响应这个请求,把指定的网页传送回来,用户才看到了网页。

下面是一个典型的客户端向服务器发送请求的例子:

GET Destination_IP/index.html http/1.0

GET代表客户端的请求命令,而服务器也受理这个命令;

Destination_IP代表远程主机的IP地址;index.html是客户端请求的资源;

http/1.0是HTTP协议的版本。

1 2 3 4 5

关键词: 网络 协议 WebServer 实现 SX 单片机 基于

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版