目录
1、前言
项目开发中经常需要使用到私有协议和Qt,Android等GUI前端通信,比较常用的使用POST和GET方式带出MESSAGE。实际使用中为了减少工作量和代码复用,经常使用到三方库,比较常用的服务有libevent或boost中的网络库、muduo, 也可自行写一套socket系统调用的二次封装, 当然这种方式不利于快速开发, 学习还是可以的。
这篇文章主要使用libevent库,因为是c写的, 所以掌握libevent非常重要。
- POST请求比较常用, 特别是针对一些数据比较小的场景,比如控制相关, 业务相关的。当然传图片也可以,传输效果过低不推荐。
- 针对传输二进制比较大的数据, 可以使用GET方式。
针对以上,这里简单使用http的POST和GET方法解决以上问题。
关联:libevent库,链接libevent 源码地址
jsoncpp的编译和使用参考我的这篇文章: 链接C++库libjsoncpp使用
2、测试demo
测试demo写的比较唐突,所以可能存在一些内存释放等BUG,因此如果向使用一下demo的程序开发,需要renew代码和多调试。
2.1、目录结构
event目录
|-- libevent头文件
http_server.cpp
|-- CHttpServer 功能类,里面带main的测试程序
http_server.h
|-- CHttpServer 接口
libevent.a
|-- libevent库
libevent_core.a
|-- libevent库
libevent_pthreads.a
|-- libevent库
其中event目录是libevent编译后的头文件, *.a是libevent编译后的库静态文件,如果要链接动态库,请自行编译。
2.2、 测试源码
2.2.1、http_server.cpp
#include <unistd.h>
#include <iostream>
#include <string>
#include <memory> //shared_ptr,unique_ptr .etc
#include "http_server.h"
CHttpServer::CHttpServer():base_(nullptr), http_(nullptr), serverloopThread_(nullptr),isExit_(true), sock_(nullptr)
{
if(!serverloopThread_){
serverloopThread_ = new std::thread(&CHttpServer::serverDispatch, this);
if(!serverloopThread_){
std::cout << "创建线程失败!" << std::endl;
}
}
}
CHttpServer::~CHttpServer()
{
if(serverloopThread_){
serverloopThread_->join();
delete serverloopThread_; serverloopThread_ = nullptr;
}
}
int CHttpServer::pic_video_test(struct evhttp_request *_req, const std::strin

最低0.47元/天 解锁文章
577

被折叠的 条评论
为什么被折叠?



