首先:
#include "jqhttpserver.h"
然后将E:\CPP\lib\03JQHttpServer\library\JQLibrary\include 放到库目录
jqhttpserver.h 和 jqhttpserver.cpp 加入到项目中
JQHttpServer::TcpServerManage* tcpServerManage;//http服务
//服务器收到请求时执行 void jjsoft::onHttpAccepted(const QPointer< JQHttpServer::Session >& session) { // 注1:因为一个session对应一个单一的HTTP请求,所以session只能reply一次 // 注2:在reply后,session的生命周期不可控,所以reply后不要再调用session的接口了 auto c = session->requestUrlQuery();//请求参数转qMap if (c["a"] == "web") //获取网站 { QString k = c.value("k"); QString ip = session->requestSourceIp(); if (k.isEmpty()) { log("请求关键为空"); return; } lock.lockForRead(); jj->s(); QString jg; int iCount = 0; //for循环比iter 速度快1倍 for (int i = 0; i < txtSl.count(); i++) { if (txtSl.at(i).contains(k)) { iCount++; jg.append(txtSl.at(i) + "\n"); } } log(k + " 匹配:" + jj->i2s(iCount) + " 耗时:" + jj->e() + "ms IP:" + ip); lock.unlock(); session->replyText(jg); } // 回调发生在专用的处理线程内,不是主线程,也不是socket的生存线程,请注意线程安全 // 若阻塞了此回调,那么新的连接将被阻塞(默认情况下有2个线程可以阻塞2次,第3个连接将被阻塞) // session->replyText(QString("url:%1\nbody:%2").arg(session->requestUrl(), QString(session->requestBody()))); // session->replyRedirects( QUrl( "http://www.baidu.com" ) ); // session->replyJsonObject( { { { "message", "ok" } } } ); // session->replyJsonArray( { "a", "b", "c" } ); // session->replyFile( "/Users/jason/Desktop/Test1.Test2" ); // session->replyImage( QImage( "/Users/jason/Desktop/Test.png" ) ); // session->replyBytes( QByteArray( 4,'\x24' ), "text" ); // $$$$ } //按钮-开启服务 void jjsoft::btn_go() { if (ui.btn_go->text() == "开启服务") { QString txtStr = jj->readTxt("data.txt"); txtSl = jj->split(txtStr); log("加载网站总数:" + jj->i2s(txtSl.count())); int port = ui.edt_port->text().toInt(); //启动HTTP服务器 tcpServerManage = new JQHttpServer::TcpServerManage(10); tcpServerManage->setHttpAcceptedCallback(std::bind(&jjsoft::onHttpAccepted, this, std::placeholders::_1)); const auto listenSucceed = tcpServerManage->listen(QHostAddress::Any, port); if (listenSucceed) { log("HTTP服务器启动成功 端口:" + jj->i2s(port)); } else { log("HTTP服务器启动失败"); } ui.btn_go->setText("停止服务"); } else { log("停止HTTP服务"); tcpServerManage->deleteLater(); ui.btn_go->setText("开启服务"); } }