C++写HTTP服务器
来源:互联网 发布:华为软件开发工资待遇 编辑:程序博客网 时间:2024/06/18 12:37
这个项目底层是用Boost.Asio库,通过正则表达式reg解析http,然后做出响应。
具体做法文末链接有详细介绍,在这里说一下这个项目得到的知识点,首先是reg正则表达式的用法
regex/regex_match/smatch
regex是用来定义正则表达式的,smatch是用来局部匹配的,regex_match是用来寻找的。具体用法如下:
string fnames[]= {"foo.txt", "bar.txt", "test", "a0.txt", "AAA.txt"}; regex base_regex("([a-z]+)\\.txt"); smatch base_match; for(auto &fname:fnames){ if(regex_match(fname,base_match,base_regex)){ for(int i=1;i<base_match.size();i++) cout<<"sub-match "<<base_match[i]<<endl; } }
常用IO库
- iostream
- fstream
- stringstream
getline
典型用法
string s;while(getline(cin,s)){ do();}
- 输入回车,getline也不会跳出while,因为getline返回的是第一个参数,而不是第二个参数,所以只能用ctlr+z来退出
- getline可以通过第三个参数来规定结束符,没有第三个参数,默认是”\n”,所以可以如下用法
getline(cin,s,"#")
,遇到‘#’即退出,但是要注意,如果输入hello#world,再输入!#,则第一次会得到hello,第二次会得到world!
rdbuf
典型用法
- 文件复制
fstream f1("1"); ftream f2("2");f1>>f2.rdbuf
- stream类转string类
stringstream ss;ostream os();os>>ss.rdbuf();
-
Boost.Asio 的buffer与streambuf
read可以用buffer,streambuf.
read_until只能用streambuf,
用streambuf好处是
- 不用自己开辟空间
- 可以很方便地与c++中的stream类共同处理
streambuf典型用法如下
streambuf write_buf;ostream stream(write_buf.get());op_ostream();asyn_write(*socket,*write_buf)
streambuf read_buf;asyn_read(*socket,read_buf...);istream stream(read_buffer.get());op_stream();//在这里通过stream解析刚刚收到的东西
其他小知识点
- 用到模板类,必须同时包含.hpp和.cpp,因为c++不能支持分离编译
- openssl被分为两部分,apt-get install openssl是应用程序,而apt-get install libssl-dev是用于开发的库。安装完libssl-dev后,可以同pkg-config –libs openssl 来查看用openssl时,必须链接的库
项目讲解
本项目中,由于要同时支持http,https,所以先写了个基类BaseServer,然后HttpServer,HttpsServer,分别继承,因为,两种差别在于用到的socket,还用accept方式,http用的是ip::tcp::socket所以,https用的是ssl::stream,所以BaseServer是用模板,到时候再将不同的socket传入即可,因为只有accept不同,其他都一样,所以只需子类复写accept函数即可,又因为基类BaseServer的start函数中会调用accept()函数,为了能够让子类调用到他们自己的函数,所以,accept()必须为virtual。
参考链接
http://blog.csdn.net/watson2016/article/details/52415382
阅读全文
0 0
- C写的http服务器
- C++写HTTP服务器
- 写个Http服务器吧!
- Java写简单HTTP服务器
- 自己动手写http服务器---java版
- 自己动手写http服务器---java版
- 自己动手写http服务器---java版
- java 手动写http静态网页服务器
- java 手动写http静态网页服务器
- 六款 c http 服务器
- 从零开始学写HTTP服务器(一)http协议简介
- 用c语言写http协议
- c linux服务器简单http server程序
- C语言实现的微型 http 服务器
- c语言HTTP服务器,超级简易版。
- linux c 实现简易HTTP服务器
- 网友写的JAVA版HTTP服务器程序
- J2ME写的简单Http服务器,同时是简…
- get标签
- 了解和配置 PAM
- 给Krpano小白们的最最最入门级教程(二)
- 两招修改Centos7 系统时区!
- a标签中target设置为blank和_blank有什么区别?
- C++写HTTP服务器
- JZOJ 5440. 【NOIP2017提高A组冲刺11.1】背包
- MVC BundleConfig文件的作用
- Java8 串行流和并行流的执行效率比较
- html5移动端引导页-关于背景图,垂直居中等知识点
- FCC算法:五、Title Case a Sentence--句中单词首字母大写
- 深入了解View的绘制流程
- 容易中的计算机EI源刊
- caffe中Solver文件及其参数含义