windows c/c++使用libevent庫編寫http/https服務端
一、前言
本文章旨在對自己接觸過的專案的一種溫習回顧,以此編寫作為筆記,也希望能幫到各位有需要的道友,
若有任何建議或探討可加 QQ群進行交流:887939177
二、間單描述
建立http server,只需編譯libevent庫即可,若想建立https server,則需要編譯libevent和openssl庫。
當然不論是要使用http還是https,你都可以使用符合https server編譯出來的庫。
三、編譯openssl靜態庫
1.下載openssl1.1.1原始碼:https://download.csdn.net/download/hedubao135792468/10686090
2.下載openssl輔助編譯工具(Perl & Nasm):
3.準備編譯環境,本人的環境是win10,VS2017。
4.解壓第二步下載的輔助編譯工具RAR壓縮包,分別安裝裡面的2個exe檔案,均為下一步即可完成安裝。
5.解壓第一步下載的原始碼RAR壓縮包。
6.開啟VS2017開發人員命令提示符,developer Command Prompt for VS2017(你也可開啟對應版本的,此處最好以管理員許可權開啟,因為編譯過程中訪問一些檔案需要管理員許可權)。
7.利用cd命令進入原始碼目錄,輸入對應編譯指令,截圖為我輸入的指令(perl Configure VC-WIN32 no-shared no-tests --prefix=c:\herob\openssl)
8.此時目錄已經生成了makefile檔案,接下來輸入nmake指令和nmake install即可,編譯好的庫就在prefix指令的路徑下了。
9.其中include資料夾為呼叫庫時需要的標頭檔案,lib資料夾則為編譯好的靜態庫libcrypto.lib libssl.lib。
TIP1:perl Configure VC-WIN32 [no-shared] [no-asm] [no-tests] [–debug] -D_WIN32_WINNT=0x0501 --prefix=d:\openssllib
VC-WIN32:可根據需要修改為64位
[]中的為可選項,no-shared為編譯靜態庫,不加此項預設編譯出的是動態庫;
no-tests為不需要tests功能,如果只需要openssl的庫可以加上此項,否則可能會出很多錯誤導致編譯不過;
–debug為編譯debug版,不加此項預設編譯出的是release版
–prefix指定生成庫的路徑,路徑最好不包含漢字
TIP2:如遇一些檔案打不開的報錯,請使用管理員許可權答案開命令提示符視窗。
該連結資源為已經編譯好的openssl靜態庫:https://download.csdn.net/download/hedubao135792468/10686108
四、編譯libevent靜態庫
1.下載libevent原始碼:https://download.csdn.net/download/hedubao135792468/10686059
2.解壓下載號的RAR原始碼包,我們的編譯流程可以看一下目錄下的Makefile.nmake檔案:
3.我們可以看到,當指定了Openssl的路徑時編譯出來的庫則支援SSL,反之則不支援。
4.我們需要編譯支援https的庫,則需要指定openssl庫路徑(即剛才我們編譯好的openssl庫),以下截圖為我的修改:
5. 開啟VS2017開發人員命令提示符,developer Command Prompt for VS2017(你也可開啟對應版本的,此處最好以管理員許可權開啟,因為編譯過程中訪問一些檔案需要管理員許可權)。
6.利用cd命令進入原始碼目錄,輸入編譯指令(nmake /f Makefile.nmake static_libs)。
7.執行完成後我們在原始碼目錄下就可以看到已經生成了libevent相關的4個靜態庫檔案了(無SSL的則只有3個庫檔案,無libevent_openssl.lib)
五、Windows c/c++利用libevent庫建立http/https服務端
準備工作:
引入庫檔案以及標頭檔案,將之前編譯好的libevent、openssl的靜態庫及標頭檔案放到你的工程目錄下,然後設定工程引用的庫路徑以及標頭檔案路徑,並引入庫檔案(注意有的時候需要另外加上一般系統自帶的ws2_32.lib)
建立流程:
示例程式碼:
簡略的接收處理回撥程式碼:
注意:若想建立http服務端,只要將SSL證書方面的程式碼去除即可!
由於使用CSDN部落格文章編寫器不熟悉,導致程式碼粘貼出現問題,所以不得不以截圖的形式完成程式碼貼上,此處請朋友們見諒!
文章描述比較簡單,希望能幫助到朋友們,如有疑問或建議,歡迎加QQ群(887939177)進行討論!