1. 程式人生 > >windows c/c++使用libevent庫編寫http/https服務端

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):

https://download.csdn.net/download/hedubao135792468/10686133
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)
生成makefile檔案


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檔案:
nmake檔案
3.我們可以看到,當指定了Openssl的路徑時編譯出來的庫則支援SSL,反之則不支援。
4.我們需要編譯支援https的庫,則需要指定openssl庫路徑(即剛才我們編譯好的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)
生成libevent靜態庫

五、Windows c/c++利用libevent庫建立http/https服務端

準備工作:

引入庫檔案以及標頭檔案,將之前編譯好的libevent、openssl的靜態庫及標頭檔案放到你的工程目錄下,然後設定工程引用的庫路徑以及標頭檔案路徑,並引入庫檔案(注意有的時候需要另外加上一般系統自帶的ws2_32.lib)

建立流程:

Created with Raphaël 2.2.0開始WSAStartup2.2event_base_newevhttp_new是否支援SSL?SSL_CTX_newSSL_CTX_use_certificate_chain_file & SSL_CTX_use_certificate_file & SSL_CTX_use_PrivateKey_fileSSL_CTX_check_private_keyevhttp_set_bevcbevhttp_set_gencbevhttp_bind_socket是否阻塞呼叫?event_base_dispatchevhttp_free & event_base_free & WSACleanup結束event_base_loopyesnoyesno

示例程式碼:
引入標頭檔案
證書訪問回撥函式
建立https server程式碼片段1建立https server程式碼片段2
建立https server程式碼片段3
建立https server程式碼片段4
建立https server程式碼片段5

簡略的接收處理回撥程式碼:
獲取命令型別,引數,host
接收資料
傳送資料

注意:若想建立http服務端,只要將SSL證書方面的程式碼去除即可!

由於使用CSDN部落格文章編寫器不熟悉,導致程式碼粘貼出現問題,所以不得不以截圖的形式完成程式碼貼上,此處請朋友們見諒!
文章描述比較簡單,希望能幫助到朋友們,如有疑問或建議,歡迎加QQ群(887939177)進行討論!
QQ群二維碼