基于SX52的嵌入式Web服务器的快速实现
3 Web服务器实现
TCP在Web服务器下采用的状态转移见图2。
(1)服务器在closed状态下主动打开端口80进入listen状态;
(2)经过3次常规握手后进人establish的数据传送状态;
(3)服务器发完数据发fin关闭请求进入fin wait-1状态;
(4)收到对方发来的Ack后进入fin wait-2状态;
(5)收到对方发来的fin关闭请求后回送Ack回到closed状态。
考虑HTYP常用的abs_单片机 嵌入式系统 Internet Web服务器形式的统一资源标识符URI,在资源紧缺的系统中实现完整的文件结构如"images.gif''的查询与定位,如果采用一般计算机程序中常用的方法则代价很高。一种简便有效的方法是计算URI各字符的ASCII码之和。网页存放于SX52的外部EEPROM中。假设利用前512字节存放最大256个网页的地址,绝对路径".btm"的不带进位ASCII码之和为#$be,可以到2x#$be+#$17c的地方找到要发送回客户浏览器的数据存放地址;下载网页到服务器时也用一个程序按上述方法将各网页排好即可,当然网页前都加了一段HTYP 1.0的标准响应头信息。这正是Ubicom公司提供的E2File程序所做的,也可以自己编写一个这样的程序以实现HTFP 1.1的除GET、POST方法外的其它方法或扩展功能。
除了用Java Applet实现动态网页外,利用post方法也可与服务器交互。例如通过IE浏览器用复选框按钮控制并显示一组灯的开与关的基本Web控制,其HTML网页的提交表单FORM内应该包含有<input type=checkbox name="l"value="0~n">的类似语句,其中0~n为欲控制灯的编号,name的取值为一位数字或字符,有利于节省SX52的查询匹配程序空间,E2File程序将网页中如下显示灯的状态的HTML超链接语句<img src="images/led?gif">中的"?"编号为非ASCII字符#$f0~#$fn等下载存储到服务器的EEPROM中。当n用POST方法发送数据给服务器时,SX52服务器计算两个空格间的abs_单片机 嵌入式系统 Internet Web服务器形式的URI的ASCII字符之和后到相应EEPROM中,用上述下载网页的计算方法找到该网页的地址后,跳过HTTP的请求头匹配l=0&…l=n表示复选框被选中的数据并对相应编号的灯开关后,返回该网页给IE时会根据实际灯的状态将EEPROM中存储网页的非ASCII字符#$f0~#$fn退换为ASCII字符"n"或"f"。这样IE就能正确地通过超链接再次与服务器交互(GET方法),下载显示ledon.gif或ledof.gif显示实际灯的状态了。而要在IE上正确显示现场某个控制变量的值时,同样可以将n位显示数值编号为非ASCII字符#$f0#$fl…#$fn的形式存储到服务器中,SX52服务器端先将实际的数值转换为BCD码后再用对应的ASCII字符将#Sf0#$f1…#$fn替换返回,从而能在浏览器端显示服务器端控制变量的变化。国内用户使用的北京革新提供的开发演示板程序较充分地提供了常用的Intemet网络协议软件虚拟模块,也提供了一个基本可实际应用的Web演示控制,只要做较少改动就可以用于实际控制中。不过它只能一次控制一个灯的开关,且任何人都可以轻易地更改。现要求一次能控制所有的灯,但需要在IE浏览器上输入密码123abc方可生效。程序修改如下:
(5)在模块TcpAppRxData的分支:lookforl的开头增加以下语句:
当然以上密码通过IE仍以明文传送,不安全,但是它可以通过常用的IE浏览器操作,不需要专用的客户端软件。这适用于大企业,它们有局域网,
《基于SX52的嵌入式Web服务器的快速实现(第2页)》