微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM硬件平台上基于UCOS移植Lwip网络协议栈

ARM硬件平台上基于UCOS移植Lwip网络协议栈

时间:11-20 来源:互联网 点击:


图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"
"this is Lwip test\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"
};


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top