这篇博文是准备在前两天就编辑发出来的。吃完饭回来,上淘宝买点东西出问题了,等到现在才编完。准确的说是边聊天边编辑完了的。以前学习过程中搜索的一些笔记资料都是新浪博文或者CSDN或者chinaunix里面的,我觉得有必要把这个东西写成博文,后续再继续更新里面的内容,学到的一点而东西,就放在这里。才开始学,会有很多地方错了的。
说正经的,先说一下LWIP协议栈,就是服务器和PC端浏览器之间通信的TCP/IP类的协议栈,这个协议栈有三种接口,这里叙述时,采用RAW API接口,与其他接口相比, RAW API代码执行效率最高、RAM占用最低。RAW API是lwIP中无需操作系统就可使用的唯一一种API,这样就可以实现裸机上的WEB服务器了。
以下是LWIP协议栈的特点,就是优点吧(百度的):
- 支持多网络接口下的IP转发;
- 支持ICMP协议;
- 包括实验性扩展的UDP(用户数据报协议);
- 包括阻塞控制、RTT 估算、快速恢复和快速转发的TCP(传输控制协议);
- 提供专门的内部回调接口(Raw API),用于提高应用程序性能;
- 可选择的Berkeley接口API (在多线程情况下使用) 。
- 在最新的版本中支持ppp
- 新版本中增加了的IP fragment的支持.
- 支持DHCP协议,动态分配ip地址.
浏览器和WEB服务器的通信流程大概是这个样子的(只简单介绍一下逻辑流程,慢慢学):
浏览器发送一个URL,如下
上面是用浏览器开发者工具查看到的网络数据情况,浏览器发送的请求一般有两种GET和POST请求,GET一般用于请求得到网页,也可以用于请求一些数据,POST则用于上传表单,即网页里面输入的内容或文件(后面继续更新关于POST的内容)。这里我发送了一个请求在地址栏输入192.168.2.222(WEB服务器的地址),浏览器自动处理成了"GET http://192.168.2.222/",请求的是这个地址下根目录里的一个文件,也就是服务器得到这个请求后返回一个默认的网页(类似首页),图片中下面的"200 OK"是服务器的响应状态。
LWIP协议栈中实现了的数据接收和发送的功能,接收到客户端"GET http://192.168.2.222/"请求后,就可以进行分析这串字符串了,分析的具体代码实现简单介绍如下:
这里是判断是 GET还是POST请求,然后对应做好相应的标记,以便后续进行处理。比如GET就直接返回给客户端网页数据,如果是POST进行POST的后续处理,如解析客户端POST提交表单的具体内容,得到用户数据,用户名,密码等,如下:
上图中的http_post_request(.....)就是POST所要做的事儿了,具体的实现,可根据功能的需求不同。
通过POST和GET功能可以实现一些功能,如每秒钟GET一次就可以实时刷新数据了,得到MCU中通过传感器采集的温湿度数据了,服务器中采集的数据就可以实时显示在客户端的网页中了。
当然在返回给客户端数据时有一些细节,如如何通过得到的URL请求解析其中的URI,并返回正确的目标网页,在后面的关于CGI调用中还会提到。
还有一个问题,当客户端请求后,客户端只想得到填充网页局部的数据,而且在得到后只是用来刷新网页的局部,并不想每次得到数据后为了改变网页中的某一块数据而去刷新整个网页时,可以使用AJAX技术刷新,这个也会在后面的博文中提到。如下的一个本文实例:(只刷新温湿度和气压的值)
网页中设置MCU的时间,则是通过POST提交的内容(如时间值),在WEB服务器中调用CGI程序实现的。
后续的内容中,留下了两个问题:(1)POST表单的提交,(2)CGI程序的调用。