RT-Thread 网络实验 1 简单的 HTTP 服务器
实验目的:
了解 RT-Thread 的网络组件,了解 LWIP 的基本 API 使用;
了解 HTTP/1.0 协议的基本功能
掌握使用 LwIP API 实现一个实际地应用
实验设计:
设计一个简单的 web 服务器应用,它由单一线程组成,负责接收来自网络的连接,响应 HTTP
请求,以及关闭连接。
在这个应用中的线程 lw_thread()负责必要的初始化及连接设置工作;连接设置过程是一个相当
简单的例子,显示了如何使用最小限度 API 初始化连接。使用 netconn_new()函数建立一个连接
后,这个连接被绑定在 TCP 80 端口并且进入监听(LISTEN)状态,等待连接。一旦一个远程
主机连接进来,netconn accept()函数将返回连接的 netconn 结构。当这个连接已经被 process
_connection() 函数处理后,必须使用 netconn_delete() 函数删除这个 netconn。
在 process_connection()函数,调用 netconn_recv()函数接收一个 netbuf,然后通过 netbuf_data()
函数获取一个指向实际的请求数据指针。这个指针指向 netbuf 中的第一个数据片断,并且我们
希望它包含这个请求。这并不是一个不合实际的想法,因为我们只读取这个请求的前七个字节。
如果我们想读取更多的数据,简单的方法是使用 netbuf_copy()函数复制这个请求到一个连续的
内存区然后在那里处理它。
这个简单的 web 服务器只响应 HTTP GET 对文件“/”的请求,并且检测到请求就会发出响应。
这里,我们既需要发送针对 HTML数据的 HTTP头,还要发送 HTML 数据,所以对 netconn_write()
函数调用了两次。因为我们不需要修改 HTTP 头和 HTML 数据,所以我们将 netconn_write()函
数的 flags 参数值设为 NETCONN NOCOPY 以避免复制。
最后,连接被关闭并且 process_connection()函数返回。连接结构也会在这个调用后被删除。
源程序说明:
先看下简单 HTTP 服务器的实现代码
/* 使用最小限度API实现的一个简单的HTTP/1.0服务器 */
#include <lwip/api.h>
#include <finsh.h>
评论0