ARM硬件平台上基于UCOS移植Lwip网络协议栈
图4.5-1 ping测试
4.6 设计并实现简单的WEB服务器
HTTP是一个基于TCP/IP,属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
通过浏览器访问一个WEB服务器时,其实就是利用HTTP 协议向服务器发送web页面请求,WEB服务器接收到该请求后,返回应答信息和浏览器请求的网页内容。
我们以一个最简单的例子说明一下HTTP协议:
浏览器发送的标准请求是这样的:
1. GET /index.html HTTP/1.1
2. Accept: text/html
3. Accept-Language: zh-cn
4. User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
5. Connection: Keep-Alive
上面的请求含义:
1. 说明我需要index.html这个网页内容,使用的HTTP协议版本是1.1
2. 我可以接收的文件类型是text/html
3. 我可以接收的语言是中文
4. 浏览器的型号和版本号
5. 需要保持长连接。
服务器的回复信息是这样的:
1. HTTP/1.1 200 OK
2. Date: Sat, 4 Apr 2015 18:54:17 GMT
3. Server: microHttp/1.0 Zlgmcu Corporation
4. Accept-Ranges: bytes
5. Connection: Keep-Close
6. Content-Type: text/html; charset=gb2312
服务器回复的信息含义:
1. 服务器返回浏览器访问的页面存在。
2. 该响应头表明服务器支持Range请求,以及服务器所支持的单位是字节(这也是唯一可用的单位)。
3. 关闭连接
4. 服务器返回的文件类型为text/html,文件编码为gb2312。
基于上述HTTP协议原理,我们可以设计一个简单的WEB服务器,有浏览器访问时WEB服务器返回固定的页面。
在浏览器中输入开发板的IP地址:192.168.0.174
页面显示如图4.6-1 简单WEB服务器:
浏览器默认访问端口是80,我们开发板使用lwip提供的socket编程接口编程实现监听80端口,有浏览器访问开发板的80端口,开发板向浏览器返回指定WEB页面。
实现代码如下:
void lwip_demo(void *pdata)
{
struct netconn *conn,*newconn;
lwip_init_task();
conn=netconn_new(NETCONN_TCP);
netconn_bind(conn,NULL,80);
netconn_listen(conn);
while(1)
{
newconn=netconn_accept(conn);
if(newconn!=NULL)
{
struct netbuf *inbuf;
char *dataptr;
u16_t size;
inbuf = netconn_recv(newconn);
if(inbuf!=NULL)
{
//测试案例
netbuf_data(inbuf,(void **)&dataptr,&size);
netconn_write(newconn,htmldata,sizeof(htmldata), NETCONN_NOCOPY);
netbuf_delete(inbuf);
}
netconn_close(newconn);
netconn_delete(newconn);
}
}
}
网页内容:
const unsigned char htmldata[]={
"HTTP/1.1 200 OK\r\n"
"Date: Sat, 4 Apr 2015 18:54:17 GMT\r\n"
"Server: microHttp/1.0 Zlgmcu Corporation\r\n"
"Accept-Ranges: bytes\r\n"
"Connection: Keep-Close\r\n"
"Content-Type: text/html; charset=gb2312\r\n"
"\r\n"
"\r\n"
"
"
"\r\n"
"
HELLO WELCOME TO LWIP WEB sever
\r\n""
硬件平台:ARM
\r\n""
软件平台:UCOS Lwip
\r\n""
Design by ***
\r\n""\r\n"
"\r\n"
};
ARM硬件平台UCOS移植网络协议 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)