1.サービスを提供するC ++ HTTPを使用する必要性、私はlibeventを使用したいと考えていましたが、いくつかの検索の後、唯一の2つの参照がライブラリファイルをマングースました。
公式文書:https://cesanta.com/docs/overview/intro.html
公式コード:https://github.com/cesanta/mongoose
2.関連するコード
#include " HttpService.h "
のstruct mg_serve_http_optsのHTTPService :: s_http_server_opts。
// 请求事件处理
ボイドのHTTPService :: mgEvHandler(構造体 mg_connection * NC、INT EV、ボイド *のP){
// 处理要求
であれば(EV == MG_EV_HTTP_REQUEST){
構造体 http_message * MSG =(構造体 http_message * )P。
// 本体内容
のchar *本体= 新しい CHAR [msg-> body.len + 1 ]。
memsetの(身体、0、Msg-> + body.len 1。);
のmemcpy(本体、MSG - > body.p、msg-> body.len);
// URIコンテンツ
チャー * URI = 新しい新しい CHAR [msg-> uri.len + 1 ] ;
のmemset(URI、0、msg-> + uri.len 1。);
のmemcpy(URI、MSG - > uri.p、msg-> uri.len);
// 戻り身体情報
mgSendBody(NC、" bodyコンテンツ" ) ;
// 戻りファイルをダウンロード
// mgSendFile(「s_http_server_opts.document_rootの相対ファイルパス」);
削除URI;
削除体;
}
}
// メッセージボディを送る
無効のHTTPService :: mgSendBody(構造体 mg_connection NC *、constの char型 *の内容){
mg_send_head(NC、200は、strlenを(コンテンツ)、" コンテンツタイプ:text / plainの\ R&LT \ nConnection:閉じます" ) ;
mg_send((コンテンツ)strlenをNC、コンテンツ、);
NC - >旗| = MG_F_SEND_AND_CLOSE;
}
// ファイルを送信、ファイルの場所がs_http_server_opts.document_rootのパスに相対的である
無効のHTTPServiceを:: mgSendFile(構造体 mg_connection NC *、構造体 * HM http_message、CONST 文字*filePathに){
mg_http_serve_file(NC、HMファイルパス、mg_mk_str(" text / plainの")、mg_mk_str("" ));
}
// 初始化并启动
BOOLのHTTPService ::開始(CONST 文字 * ポート){
構造体mg_mgr MGR。
構造体 mg_connectionの*のNC;
mg_mgr_init( &MGR、NULL);
printf(" ポート%sの\ n上の開始Webサーバ" 、ポート)。
NC = mg_bind(&MGR、ポート、mgEvHandler)。
もし(NC == NULL){
のprintf(「リスナー\ nを作成に失敗しました」);
返す 偽;
}
// HTTPサーバパラメータを設定します
mg_set_protocol_http_websocket(NC)を、
s_http_server_opts.document_root = " " ; // 文件相对路径サーブカレントディレクトリ
s_http_server_opts.enable_directory_listing = " はい" 。用(;;){
(mg_mgr_poll&MGR、1000年)。// 1S轮训一次 }
mg_mgr_free( &MGR)。返す真
;
}
ダウンロードする3.vs2019プロジェクトファイル:vs2019_HttpSvr.zip
上記。
ます。https://www.cnblogs.com/chevin/p/11051867.htmlで再現