C ++ HTTPサービス

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で再現

おすすめ

転載: blog.csdn.net/weixin_34054866/article/details/93571301