RT-Thread网络实验1-简单的HTTP服务器.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
RT-Thread网络实验1-简单的HTTP服务器.pdf

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 /* 这是实际的web页面数据。大部分的编译器会将这些数据放在ROM里 */ ALIGN(4) const static char indexdata[] = html \ headtitleA test page/title/head \ body \ This is a small test page. \ /body \ /html; ALIGN(4) const static char http_html_hdr[] = Content-type: text/html\r\n\r\n; /* 这个函数处理进入的连接 */ static void process_connection(struct netconn *conn) { struct netbuf *inbuf; char *rq; rt_uint16_t len; /* 从这个连接读取数据到inbuf,我们假定在这个netbuf中包含完整的请求 */ inbuf = netconn_recv(conn); /* 获取指向netbuf中第一个数据片断的指针,在这个数据片段里我们希望包含这个请 求 */ netbuf_data(inbuf, (void**)rq, len); /* 检查这个请求是不是HTTP GET /\r\n */ if( rq[0] == G rq[1] == E rq[2] == T rq[3] == ) { /* 发送头部数据 */ netcon

文档评论(0)

dlmus + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档