欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Windows安裝配置C/C++(VS2017)OpenSSL開(kāi)發(fā)環(huán)境配置教程

 更新時(shí)間:2017年07月19日 10:02:29   作者:九黑生魂  
這篇文章主要為大家詳細(xì)介紹了Windows安裝配置C/C++,OpenSSL開(kāi)發(fā)環(huán)境配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

OpenSSL開(kāi)發(fā)環(huán)境配置教程分享給大家,具體內(nèi)容如下

【環(huán)境信息】

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

【提醒事項(xiàng)】

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

【具體步驟】

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

2。下載完后打開(kāi)安裝,選擇安裝位置,64位和32位不要安裝在同一個(gè)目錄下

這里寫(xiě)圖片描述

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

這里寫(xiě)圖片描述

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

這里寫(xiě)圖片描述

5。新建一個(gè)解決方案,方便起見(jiàn),這里新建一個(gè)控制臺(tái)應(yīng)用程序,這里我沒(méi)有勾選“Create directory for solution”是因?yàn)檫@是一個(gè)單項(xiàng)目解決方案,所以我覺(jué)得沒(méi)有必要多創(chuàng)建一層文件夾

這里寫(xiě)圖片描述

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

這里寫(xiě)圖片描述

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

這里寫(xiě)圖片描述

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

這里寫(xiě)圖片描述

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

這里寫(xiě)圖片描述

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

這里寫(xiě)圖片描述

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

這里寫(xiě)圖片描述

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

這里寫(xiě)圖片描述

13。同樣的方法,將安裝目錄下的“l(fā)ib”文件夾添加到“Library Directories”中

這里寫(xiě)圖片描述

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

這里寫(xiě)圖片描述 

這里寫(xiě)圖片描述

15。將工程平臺(tái)調(diào)整為自己需要的平臺(tái),這里演示x64平臺(tái)

這里寫(xiě)圖片描述

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

16-A:

在代碼中添加

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

這里寫(xiě)圖片描述 

16-B:

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

這里寫(xiě)圖片描述 

這里寫(xiě)圖片描述

【測(cè)試代碼】

1。這段代碼是用C++和Windows API寫(xiě)的
2。這里添加lib文件用的方法A,如果想用方法B則注釋或刪掉對(duì)應(yīng)的“#pragma comment…”即可
3。這段代碼是用https://www.baidu.com來(lái)測(cè)試的,如果想要修改為其他測(cè)試地址,除了修改第25行的wstrHost外,還應(yīng)修改第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[])
{
 //啟動(dòng)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);

 //創(chuàng)建套接字
 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庫(kù)
 //(雖然不知道為什么,但是不加這三行似乎并不會(huì)導(dǎo)致什么問(wèn)題,在不加這3行的情況下測(cè)試了幾個(gè)網(wǎng)站并沒(méi)有發(fā)現(xiàn)任何問(wèn)題喵)
 SSL_library_init();
 SSLeay_add_ssl_algorithms();
 SSL_load_error_strings();

 //創(chuàng)建SSL會(huì)話環(huán)境等
 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;

 //發(fā)包
 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形式的,所以中文會(huì)亂碼
 //如果要正常顯示中文,需要再轉(zhuǎn)換為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;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言中printf()緩沖問(wèn)題詳解

    C語(yǔ)言中printf()緩沖問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中printf()緩沖問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • C++實(shí)現(xiàn)圖片轉(zhuǎn)base64的示例代碼

    C++實(shí)現(xiàn)圖片轉(zhuǎn)base64的示例代碼

    Base64就是一種 基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的表示方法,本文主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)圖片轉(zhuǎn)base64,需要的可以參考下
    2024-04-04
  • 淺談QT內(nèi)存泄漏

    淺談QT內(nèi)存泄漏

    本文主要介紹了淺談QT內(nèi)存泄漏,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 二叉樹(shù)中葉子節(jié)點(diǎn)的統(tǒng)計(jì)和樹(shù)高問(wèn)題

    二叉樹(shù)中葉子節(jié)點(diǎn)的統(tǒng)計(jì)和樹(shù)高問(wèn)題

    今天小編就為大家分享一篇關(guān)于二叉樹(shù)中葉子節(jié)點(diǎn)的統(tǒng)計(jì)和樹(shù)高問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • C語(yǔ)言示例講解if else語(yǔ)句的用法

    C語(yǔ)言示例講解if else語(yǔ)句的用法

    這篇文章主要介紹C語(yǔ)言中的If Else語(yǔ)句怎么使用,在日常操作中,相信很多人在If Else語(yǔ)句怎么使用問(wèn)題上存在疑惑,小編查閱了各式資料,整理出使用方法,接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧
    2022-06-06
  • C++中的六個(gè)函數(shù)

    C++中的六個(gè)函數(shù)

    本文給大家介紹了C++中的六個(gè)函數(shù),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-05-05
  • C語(yǔ)言實(shí)現(xiàn)食堂就餐管理系統(tǒng)(帶鏈表)

    C語(yǔ)言實(shí)現(xiàn)食堂就餐管理系統(tǒng)(帶鏈表)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)食堂就餐管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 關(guān)于CLion配置visual?studio(msvc)和JOM多核編譯的問(wèn)題

    關(guān)于CLion配置visual?studio(msvc)和JOM多核編譯的問(wèn)題

    這篇文章主要介紹了CLion配置visual?studio(msvc)和JOM多核編譯,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C++單例設(shè)計(jì)模式詳細(xì)講解

    C++單例設(shè)計(jì)模式詳細(xì)講解

    單例模式(Singleton Pattern)是最簡(jiǎn)單的設(shè)計(jì)模式之一。這種類(lèi)型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式,這種模式涉及到一個(gè)單一的類(lèi),該類(lèi)負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建
    2022-06-06
  • VS2022永久配置OpenCV開(kāi)發(fā)環(huán)境的實(shí)現(xiàn)

    VS2022永久配置OpenCV開(kāi)發(fā)環(huán)境的實(shí)現(xiàn)

    本文主要介紹了VS2022永久配置OpenCV開(kāi)發(fā)環(huán)境的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論