亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

發布時間:2020-09-08 20:49:04 來源:腳本之家 閱讀:303 作者:九黑生魂 欄目:編程語言

OpenSSL開發環境配置教程分享給大家,具體內容如下

【環境信息】

Windows 10 Enterprise Version 10.0.15063

下載地址:http://www.itellyou.cn/)

Visual Studio Enterprise 2017 Version 15.2(26430.12)

下載地址:https://www.visualstudio.com/downloads)

OpenSSL v1.1.0f

下載地址:https://slproweb.com/products/Win32OpenSSL.html)

【提醒事項】

1。安裝OpenSSL有兩種方法,第一種為下載OpenSSL源代碼并由自己編譯后使用;第二種為下載已編譯好的安裝包,安裝后直接可以使用。因第一種方法十分繁瑣,需要安裝Ruby進行編譯,同時編譯過程中可能產生各種各種的問題,因此在此采用第二種方法
2。每次新建工程之后都要配置一下OpenSSL開發環境
3。本人用的英文環境(英文操作系統+英文軟件),因此操作界面語言可能會和中文環境有些不同,但并不影響功能

【具體步驟】

1。下載編譯好的OpenSSL安裝包(下載地址見上方),此處有Win32和Win64可選,這里的位數指的是你調用OpenSSL開發出來的軟件的位數版本,而不是你計算機的位數。開發32位軟件選擇Win32,64位選擇Win64,如果同時需要開發32位和64位的則下載兩個。確定好位數后,下載Win32/64 OpenSSL v1.1.0f(版本號可能會因更新而有所不同),“Light版”為“輕量版”,即只包含了核心功能的版本,本文演示的為“非Light版”

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

2。下載完后打開安裝,選擇安裝位置,64位和32位不要安裝在同一個目錄下

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

3。選擇把dll復制到OpenSSL目錄下(主要是為了以后好找,如果選擇復制到Windows系統目錄下,天知道復制到哪里去了。。。)

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

4。安裝完成后,如果有捐款意向的可以捐款(別誤會我不是在打廣告。。。即使你捐款了我也拿不到一分錢),沒有意向則取消掉鉤,然后點“Finish”

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

5。新建一個解決方案,方便起見,這里新建一個控制臺應用程序,這里我沒有勾選“Create directory for solution”是因為這是一個單項目解決方案,所以我覺得沒有必要多創建一層文件夾

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

6。勾選“Empty project”(這個是個人習慣,可能鉤不鉤并沒有什么影響(“可能”這個詞就很騷了。。。))

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

7。右擊工程,選擇“Properties”

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

8。點擊左方的“VC++ Directories”,然后左上角選擇“All Configurations”

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

9。右上角選擇平臺,這里演示x64的,如果是開發Win32軟件就選Win32,如果要Win64和Win32兼顧,則分別配置一下(就是先選擇Win32進行配置,然后再選擇x64進行配置)

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

10。選中“Include Directories”,點擊右邊的下拉按鈕,點擊“Edit…”

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

11。點擊右上方的“New Line”按鈕,然后點擊新行右邊的“…”按鈕

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

12。在彈出的目錄選擇界面中選擇OpenSSL安裝目錄下的“include”文件夾,點擊“Select Folder”,再點擊“OK”完成添加

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

13。同樣的方法,將安裝目錄下的“lib”文件夾添加到“Library Directories”中

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

14。將OpenSSL安裝目錄下bin文件夾中的“libcrypto-1_1-x64.dll”和“libssl-1_1-x64.dll”(名字后面的版本號可能因更新而不同)復制到工程目錄下

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程 

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

15。將工程平臺調整為自己需要的平臺,這里演示x64平臺

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

16。添加lib文件,這里有A、B兩種方法,分別列出:

16-A:

在代碼中添加

#pragma comment(lib,"libssl.lib")
#pragma comment(lib,"libcrypto.lib")

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程 

16-B:

在“Property Pages->Linker->Input->Additional Dependencies”添加libssl.lib和libcrypto.lib

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程 

Windows安裝配置C/C++(VS2017)OpenSSL開發環境配置教程

【測試代碼】

1。這段代碼是用C++和Windows API寫的
2。這里添加lib文件用的方法A,如果想用方法B則注釋或刪掉對應的“#pragma comment…”即可
3。這段代碼是用https://www.baidu.com來測試的,如果想要修改為其他測試地址,除了修改第25行的wstrHost外,還應修改第77行的strWrite

#include<tchar.h>
#include<WinSock2.h>
#include<WS2tcpip.h>
#include<iostream>
#include<openssl\ssl.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"libssl.lib")
#pragma comment(lib,"libcrypto.lib")

CONST INT RECV_SIZE = 8192;

INT _tmain(INT argc, LPTSTR argv[])
{
 //啟動wsa
 WSADATA wsadData;
 WSAStartup(MAKEWORD(2, 2), &wsadData);

 //獲取Host的IP地址等信息
 ADDRINFOT aiHints;
 ZeroMemory(&aiHints, sizeof(ADDRINFOT));
 aiHints.ai_family = AF_INET;
 aiHints.ai_flags = AI_PASSIVE;
 aiHints.ai_protocol = 0;
 aiHints.ai_socktype = SOCK_STREAM;
 std::wstring wstrHost = TEXT("www.baidu.com");
 PADDRINFOT paiResult;
 GetAddrInfo(wstrHost.c_str(), NULL, &aiHints, &paiResult);

 //創建套接字
 SOCKET sSocket = socket(AF_INET, SOCK_STREAM, 0);
 if (sSocket == SOCKET_ERROR)
 {
  std::wcout << "Error socket" << std::endl;
  return -1;
 }

 //連接Host
 SOCKADDR_IN sinHost;
 sinHost.sin_addr = ((LPSOCKADDR_IN)paiResult->ai_addr)->sin_addr;
 sinHost.sin_family = AF_INET;
 sinHost.sin_port = htons(443);
 if (connect(sSocket, (LPSOCKADDR)&sinHost, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
 {
  std::wcout << "Error connect" << std::endl;
  return -1;
 }

 //初始化OpenSSL庫
 //(雖然不知道為什么,但是不加這三行似乎并不會導致什么問題,在不加這3行的情況下測試了幾個網站并沒有發現任何問題喵)
 SSL_library_init();
 SSLeay_add_ssl_algorithms();
 SSL_load_error_strings();

 //創建SSL會話環境等
 SSL_CTX *pctxSSL = SSL_CTX_new(TLSv1_2_client_method());
 if (pctxSSL == NULL)
 {
  std::wcout << "Error SSL_CTX_new" << std::endl;
  return -1;
 }
 SSL *psslSSL = SSL_new(pctxSSL);
 if (psslSSL == NULL)
 {
  std::wcout << "Error SSL_new" << std::endl;
  return -1;
 }
 SSL_set_fd(psslSSL, sSocket);
 INT iErrorConnect = SSL_connect(psslSSL);
 if (iErrorConnect < 0)
 {
  std::wcout << "Error SSL_connect, iErrorConnect=" << iErrorConnect << std::endl;
  return -1;
 }
 std::wcout << "SSL connection using " << SSL_get_cipher(psslSSL) << std::endl;

 //發包
 std::string strWrite =
  "GET https://www.baidu.com/ HTTP/1.1\r\n"
  "Host: www.baidu.com\r\n"
  "Connection: close\r\n\r\n";
 INT iErrorWrite = SSL_write(psslSSL, strWrite.c_str(), strWrite.length()) < 0;
 if (iErrorWrite < 0)
 {
  std::wcout << "Error SSL_write" << std::endl;
  return -1;
 }

 //收包并輸出
 //這里接受的是char形式的,所以中文會亂碼
 //如果要正常顯示中文,需要再轉換為wchar_t或std::wstring
 LPSTR lpszRead = new CHAR[RECV_SIZE];
 INT iLength=1;
 while (iLength >= 1)
 {
  iLength = SSL_read(psslSSL, lpszRead, RECV_SIZE - 1);
  if (iLength < 0)
  {
   std::wcout << "Error SSL_read" << std::endl;
   delete[] lpszRead;
   return -1;
  }
  lpszRead[iLength] = TEXT('\0');
  std::wcout << lpszRead;
 }
 delete[] lpszRead;

 return 0;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定日县| 江津市| 华池县| 武义县| 昌乐县| 伊川县| 勃利县| 甘德县| 渭源县| 徐州市| 德令哈市| 得荣县| 内丘县| 龙陵县| 睢宁县| 邹城市| 无锡市| 龙川县| 贵定县| 克什克腾旗| 阿克陶县| 合肥市| 东乡县| 孝感市| 乌兰县| 大姚县| 大邑县| 茶陵县| 宁波市| 井冈山市| 新余市| 成安县| 灵寿县| 崇信县| 乌苏市| 宁乡县| 房产| 汽车| 舒城县| 仪陇县| 探索|