本来是打算从内核开始写起,到网络,文件系统,GUI等一系列连载,发现自己写东西的速度太慢,按这样的速度也不知道什么时候才能写到网络,而LM3S8962的精华部分在于网络,所以干脆先从网络部分的内容开始,后面间隔的插入内核等部分的内容。先预告下下一节内容——用NETIO来测试网络速度
² 了解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()函数返回。连接结构也会在这个调用后被删除。
本文含有来自论坛的附件或图片:[RT-Thread网络实验1-简单的HTTP服务器.pdf],[rt-thread-httpserver.rar],点击查看原帖附件。