概述
TuFao服务器
tufao是一个由QT编写的HTTP服务器。
tufao代替apache来实现http的通信。
安装tufao
- 获取原代码
- 编译和安装
sudo apt-get install cmake qt-sdk
在tufao目录下创建build目录
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
make
sudo make install - 创建工程
创建空的工程
工程文件中增加CONFIG += TUFAO1 C++11
增加一个类MyServer,一定是QObject派生类
增加一个main.cpp实现main函数
在MyServer的构造函数,创建Tufao::HttpServer对象server
将server的信号requestReady和自己写的槽函数slotRequestReady连接
在slotRequestReady函数中,实现http协议的响应报文。
示例如下:
MyServerHandlePost.h
#ifndef MYSERVERHANDLEPOST_H
#define MYSERVERHANDLEPOST_H
#include <QObject>
#include <Tufao/HttpServer>
#include <Tufao/HttpServerRequest>
#include <Tufao/HttpServerResponse>
using namespace Tufao;
class MyServerHandlePost : public QObject
{
Q_OBJECT
public:
explicit MyServerHandlePost(QObject *parent = 0);
HttpServer* server;
void handlePostData(HttpServerRequest&, HttpServerResponse&);
signals:
public slots:
void slotRequestReady(HttpServerRequest&, HttpServerResponse&);
};
#endif // MYSERVERHANDLEPOST_H
MyServerHandlePost.cpp
#include "MyServerHandlePost.h"
#include <QFile>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonDocument>
#include <QJsonArray>
MyServerHandlePost::MyServerHandlePost(QObject *parent) : QObject(parent)
{
server = new HttpServer;
if(!server->listen(QHostAddress::Any, 8081))
{
qDebug()<<"bind error";
}
connect(server, &HttpServer::requestReady,
this, &MyServerHandlePost::slotRequestReady);
}
void MyServerHandlePost::handlePostData(HttpServerRequest &request, HttpServerResponse &response)
{
//
QFile file("/home/xueguoliang/a.txt_upload");
//
file.open(QFile::WriteOnly);
/*
data is {username: "xxx", password: "yyy"}
*/
QByteArray data = request.readBody();
QJsonDocument doc = QJsonDocument::fromJson(data);
QJsonObject root = doc.object();
QString username = root.value("username").toString();
QString password = root.value("password").toString();
if(username == "aaa" && password== "bbb")
{
// {result: "ok"}
root.insert("result", QString("ok"));
}
else
{
// {result: "ok"}
root.insert("result", QString("err"));
root.insert("reason", QString("username or password error"));
}
{
QJsonDocument doc(root);
QByteArray buf = doc.toJson();
response.writeHead(HttpResponseStatus::OK);
response.end(buf);
}
//
file.write(data);
//
file.close();
}
void MyServerHandlePost::slotRequestReady(HttpServerRequest &request, HttpServerResponse & response)
{
if(request.method() == "POST")
{
//
connect(&request, &HttpServerRequest::ready, )
// end signal: all data is ready
//
connect(&request, SIGNAL(end()), this, SLOT(slotDataEnd()));
connect(&request, &HttpServerRequest::end, [&](){
handlePostData(request, response);
});
}
else
{
response.writeHead(HttpResponseStatus::OK);
response.end("i need post methodn");
}
}
最后
以上就是不安花卷为你收集整理的TuFao服务器的安装和搭建TuFao服务器的全部内容,希望文章能够帮你解决TuFao服务器的安装和搭建TuFao服务器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复