程序检测到SockRecvFlag发生改变,立即进入处理接收数据函数。处理接收数据函数是整个程序的核心,它主要负责收发数据、解析HTTP协议和响应用户的不同请求。图5为该过程的程序流程图。
数据处理程序
HTTP协议是一种请求/响应协议。在基于HTTP的客户/服务器数据交换时,当HTTP请求产生时,就开始一次HTTP通信。过程如下:浏览器提取出URL中的主机后,向DNS发出请求,解析主机名的IP地址;DNS解析地址并将结果返回给浏览器;浏览器向该地址请求建立TCP连接;浏览器发出请求报文;服务器向浏览器发送响应报文,并将指定数据发送给浏览器;断开连接。
根据HTTP协议规定,如果客户端没有发出请求,则服务器不会自动发送页面。因此通过在网页程序中加入 标记,使浏览器在无用户干预下周期性地刷新页面,从而保证用户及时地获得远程现场的信息。
HTTP消息包括一个起始行、零个或多个消息头域、一个标示头域结束的实体行和一个可能存在的消息体。本程序主要解析消息的起始行,而忽略其它内容,这种处理思路也符合嵌入式系统硬件对软件实现的复杂度要求。请求方法决定了对请求URI所指定的资源进行操作的方式,GET方法读取URL指定的资源,一般用来向服务器传输少量且透明的数据,数据总量被限制在255个字符以内,而POST方法可传输大量数据,与HTML的表单特性相配合以实现远程动态交互控制。
当连接开始时,客户端发送GET方法请求给服务器,以访问服务器网页,为限定特定用户访问,增加数据安全性,在网页中加入基本认证机制。当客户端请求受基本认证机制保护的网页时,服务器即要求用户认证,服务器端对用户的登陆信息按Base64码解码,只有认证成功,浏览器才能获得正确的网页数据。正确的控制网页如图6所示,若用户信息有误,服务器返回以状态码401为起始行的响应消息。
图5 数据处理程序流程图
由于服务器端检测的数据处在不停的变化之中,为使网页的数据也能及时地更新,网页程序初始化时,要显示的数据都使用字符串标记暂时表示,在每次发送响应消息到端口前,再将网页中定义字符串标记用当前设备的实际值替换。
对LED的控制,网页程序采用HTML语言的表单,HTTP协议请求方法采用POST。POST作为请求方法时,首先和Web服务器建立连接,成功后浏览器将HTML表单中的值发送给Web服务器。这种方式没有字符长度的限制,表单数据是作为附加的文档发送而不是作为URL的一部分发送。服务器程序通过判断客户的不同控制命令即时做出LED灯的开关响应。
在每次连接成功后,服务器端程序会返回以状态码200开头的响应消息,消息的起始行为:HTTP/1.1 200 OK。当用户请求一个服务器端不存在的文件时,服务器返回以状态码404开头的响应消息。
图6 控制网页
结语
这种利用硬件实现TCP/IP协议的网络芯片W5100及具有Cotex-M3内核的STM32处理器构成嵌入式Web服务器的方案性价比高。通过网络,用户在浏览器端可及时收到远程现场传感器采集的数据,远程现场的开关状态指示灯可实时地响应用户的开关信号操作请求。测试表明该系统传输大块数据文件的速率可达到100KBPS。为提高网络资源的安全性,可采用AES(Advanced Encryption Standard,先进加密标准)等编码机制来加密必须保护的私有数据。