Http服务器实现文件上传与下载(四)

编程入门 行业动态 更新时间:2024-10-14 22:19:31

Http服务器实现<a href=https://www.elefans.com/category/jswz/34/1770535.html style=文件上传与下载(四)"/>

Http服务器实现文件上传与下载(四)

一、引言

  欢迎大家来到和我一起编写Http服务器实现文件的上传和下载,现在我稍微回顾一下之前我说的,第一、二章说明说明了整体的HTTP走向,第三章实现底层的网络编程。接着这一章我想给大家讲的是请求获取,和响应发送的内容。这里主要讲解的响应内容,为什么?因为我们编写的是一个与浏览器交互的HTTP服务器,所以大多数的情况下我们只进行被动的应答。

  这就是一种"提问--回答"的问题。其实在讲解这章的时候,我本来准备给大家讲解一下Linux一些信号中断的问题。因为在网络层发送的时候,系统会发送一些信号给我们的应用程序,所以会导致我们的程序意外的终止。但当我写的这篇博客的时候我又放弃,我想在讲流程走向的时候再提一个中断捕获吧。在这个请求响应层的类其实真正的设计需要很多的内容,这里就是HttpResponse类和HttpRequest类的设计,在j2EE中,我们编写Servlet的时候就用到了这2个类,如HttpServletResquest,HttpServletResponse的类,如果对这里面的内容感兴趣,可以下载tomcat,在servlet-api.jar包里面有这些类。

  在本文的实现中,Request类只包含了一个获取黄色别墅请求头和解析头的一些方法。如何解析头,我在《Http服务器实现文件上传与下载(一)》已经讲解了,读者只需要对其封装一个类即可。

二、HttpRequest类

  请求消息的解析是通过被定义在命名空间为Http的类名为HttpRequest。这个类的构造函数接受一个套接字,就是跟我们连接的那个套接字,在网络层我们已经讲过了,然后在getHeader方法中调用server_read()获取请求头,然后通过Utils::parseHeader()函数进行解析。这样把解析的内容放入需要的string中,当前不太需要的直326电影网接在map里面。这里我直接贴出代码,大家看起来也比较容易。这里我在这一章节我主要讲解的是文件的下载,所以主要会对HttpResponse的类的分析,而HttpRequest类只贴出目前需要的内容。

头文件(include/httprequest.h)

 1 #ifndef HTTPREQUEST_H
 2 #define HTTPREQUEST_H
 3 #include "socket.h"
 4 #include <map>
 5 #include <string>
 6 #include <fstream>
 7 namespace Http{
 8     class HttpRequest{
 9         public:
10             HttpRequest(TCP::Socket &c);
11             virtual ~HttpRequest();
12             std::map<std::string,std::string>  getHeader(int confd) ;
13             ......
14         protected:
15         private:
16             std::string method;
17             std::string url;
18             std::string host;
19             TCP::Socket &s;
20     };
21 }
22 
23 #endif // HTTPREQUEST_H

源文件(src/httprequest.cpp)

 

 1 #include "httprequest.h"
 2 #include "utils.h"
 3 namespace Http{
 4     HttpRequest::HttpRequest(TCP::Socket &c):s(c){
 5     }
 6 
 7     HttpRequest::~HttpRequest(){
 8     }
 9     std::map<std::string,std::string> HttpRequest::getHeader(int confd){
10         char recvBuf[1024];
11         memset(recvBuf,0,sizeof(recvBuf));
12         s.server_read(confd,recvBuf,1024);
13         std::cout<<recvBuf<<std::endl;
14         std::map<std::string,std::string> mp =Utils::parseHeader(recvBuf);

更多推荐

Http服务器实现文件上传与下载(四)

本文发布于:2024-03-08 09:18:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1720456.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件上传   服务器   Http

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!