打印
[应用方案]

基于uc/os与LwIP的http服务器在NUC472上的搭建

[复制链接]
9547|47
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 木叶小镇 于 2014-8-12 12:05 编辑

搞了好些天的nuc472以太网,先学习了一下基本知识,然后搞了一下UDP,TCP
搞的有点头大····
看不懂lwip官方的ssi与cgi,纠结了很久,但是经过不懈努力,自己编写了ssi和cgi,终于搭建了动态的http服务器
虽然水平很菜,代码写的很差,但是还是要给自己鼓励下:lol

--网页无刷新,动态显示led状态、us/os系统时间
--可设置并控制开发板led闪烁周期
--可显示图片、文字、ico图标

代码整理中。。。。。上图
----------------------------------------------------------
工程文件: NUC472_WebServer_LwIP_UCOSII.zip (1.4 MB)




沙发
powerxia| | 2014-8-10 08:55 | 只看该作者
高手,顶你,期待你的代码

使用特权

评论回复
板凳
bobde163| | 2014-8-10 09:40 | 只看该作者
这个必须得顶一下

使用特权

评论回复
地板
coslight| | 2014-8-10 17:09 | 只看该作者
很强,顶

使用特权

评论回复
5
缥缈九哥| | 2014-8-10 20:28 | 只看该作者
顶起

使用特权

评论回复
6
木叶小镇|  楼主 | 2014-8-10 22:04 | 只看该作者
工程文件已上传。。。。

使用特权

评论回复
7
qq764645456| | 2014-8-10 23:29 | 只看该作者
顶!!!

使用特权

评论回复
8
ar_m_cu| | 2014-8-11 09:41 | 只看该作者
顶起

使用特权

评论回复
9
xuan309170083| | 2014-8-11 15:43 | 只看该作者

使用特权

评论回复
10
yan_jian| | 2014-8-11 20:41 | 只看该作者
试了下,还真好使!

使用特权

评论回复
11
Dick00| | 2014-8-12 09:54 | 只看该作者
这个真是高手啊。。。。膜拜大神。。。

使用特权

评论回复
12
springvirus| | 2014-8-12 11:37 | 只看该作者
楼主加油,标题中应是LwIP吧~~~~

使用特权

评论回复
13
springvirus| | 2014-8-12 11:38 | 只看该作者
加油!跟着楼主玩玩网络!

使用特权

评论回复
14
木叶小镇|  楼主 | 2014-8-12 12:05 | 只看该作者
springvirus 发表于 2014-8-12 11:37
楼主加油,标题中应是LwIP吧~~~~

谢谢提醒,写错了,已更正。

使用特权

评论回复
15
sdnumcu| | 2014-8-12 14:45 | 只看该作者
楼主网络搞得不错啊

使用特权

评论回复
16
springvirus| | 2014-8-12 15:20 | 只看该作者
木叶小镇 发表于 2014-8-12 12:05
谢谢提醒,写错了,已更正。

看了工程,有几个疑问
1. 总体思路是,472作为服务器读取shtml文件,发往浏览器,文件内容应该是webdata.c,而又看到了fs_open,在哪里存放的文件内容,以及没看到有fs的初始化等操作,webscript.c直接用了fs_open
2. 普及下SSI和CGI的知识吧
谢谢楼主~~

使用特权

评论回复
17
springvirus| | 2014-8-12 15:50 | 只看该作者
搜了下GET和POST
Form提供了两种数据传输的方式——get和post。虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响。虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一些差异,但是了解二者的差异在以后的编程也会很有帮助的。

Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:

1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。

2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。

3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。

4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。

5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。

6、Get是Form的默认方法。

使用Post传输的数据,可以通过设置编码的方式正确转化中文;而Get传输的数据却没有变化。在以后的程序中,我们一定要注意这一点。

使用特权

评论回复
18
springvirus| | 2014-8-12 15:51 | 只看该作者
本帖最后由 springvirus 于 2014-8-12 15:53 编辑

看index.shtml的源码
<form id="form1" name="form1" method="get" action="get.cgi" target="submitFrame">
通过这里的值去设置板子上LED的闪烁频率
感觉这里应该用POST啊,不应是GET吧,想不通~~~

使用特权

评论回复
19
木叶小镇|  楼主 | 2014-8-12 17:42 | 只看该作者
springvirus 发表于 2014-8-12 15:51
看index.shtml的源码

通过这里的值去设置板子上LED的闪烁频率

确实,LED闪烁频率的提交时通过get方法,当然也可以通过pos方法,get方法一般用于提交少量数据,且安全性较差。
当在网页表单中填写好led频率值后,点击提交按钮,会发送如下格式的数据:
GET /get.cgi?period=xxxx HTTP/1.1
..........................
xxxx即为设置的周期值,在服务器端处理这些数据就可以设置led闪烁周期。
get和post方法都是http请求的一种方式,请求后一般都会等待服务器的响应。
在提交led闪烁周期后,会向网页返回cgi_respond.shtml文本,文本包括两项内容:led闪烁周期,ucos系统时钟。
然而为什么不能看到这些html文本呢?
因为在网页中使用了隐藏的框架,这个cgi_respond.shtml文本是在隐藏的框架里打开的。
为什么ucos系统时钟会动态显示,led状态颜色会变化呢?
其实也是由于这个cgi_respond.shtml。网页不断(周期为1s)的通过javascript脚本向服务器请求cgi_respond.shtml文本,文本会在在隐藏的框架里打开,然后通过javascript脚本提取ucos系统时钟,与led周期值。

使用特权

评论回复
20
木叶小镇|  楼主 | 2014-8-12 17:51 | 只看该作者
springvirus 发表于 2014-8-12 15:51
看index.shtml的源码

通过这里的值去设置板子上LED的闪烁频率

其实,还有更好的办法向服务器请求数据,而不去刷新网页,比如ajax,但是由于时间关系,就没有去实现。
并且服务器端写的ssi与cgi其实也很垃圾,因为都是自己想象的,没有参考别人的设计方法,并且限于技术水平,与时间关系,并且是初次搞嵌入式以太网,也就得过且过了。
ssi主要用于网页标签内容的替换:
比如,你采集的AD转换的数据,需要怎么在网页中显示呢?你可以在制作的网页中设置如下标签<!--#ad_value-->,至于为什么用<!--# -->,你了解一下html就明白了,可能还有其他更好的方法。
CGI,一般都是服务端的一些脚本,用来处理一些网页提交的一下数据。
其实如果是动态的服务器,比如asp服务器,php服务器,jsp服务器等等,处理get方法和post方法完全可以不用cgi,.asp  .php网页都是由服务端解释的程序,解释完以后时称静态的html网页发送web客户端。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

57

帖子

1

粉丝