【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | 配置头文件 | 配置编译参数 | 网络初始化 WSAStartup 与清理 WSACleanup 操作 )
文章目錄
- 前言
- 一、開發(fā)前的配置 ( 頭文件 | 編譯參數(shù)設(shè)置 )
- 二、網(wǎng)絡(luò)初始化 WSAStartup 與清理 WSACleanup 操作
前言
本篇博客重點分析 CNetwork 網(wǎng)絡(luò)模塊 ;
一、開發(fā)前的配置 ( 頭文件 | 編譯參數(shù)設(shè)置 )
Windows 中引入網(wǎng)絡(luò)套接字頭文件注意事項 : 必須先引入 WinSock2.h 頭文件 , 然后 再引入 Windows.h 頭文件 , 否則會報錯 ;
#include <WinSock2.h> // WinSock2.h 頭文件 必須在 Windows.h 頭文件前面 #include <Windows.h> // Windows.h 頭文件 必須在 WinSock2.h 頭文件后面使用代碼 記錄 編譯參數(shù)選項 :
#pragma warning(disable:4996) #pragma comment(lib,"Ws2_32.lib")格式風(fēng)格宏定義 :
#define FORMAT_STYLE (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS)二、網(wǎng)絡(luò)初始化 WSAStartup 與清理 WSACleanup 操作
在 CNetwork 中 , 定義了一個 WSAPrepare 私有類 ,
在 Windows 中調(diào)用網(wǎng)絡(luò)功能 , 必須執(zhí)行 WSAStartup 初始化函數(shù) , 否則無法使用網(wǎng)絡(luò)功能 ; 使用完畢后 , 一定要執(zhí)行 WSACleanup 函數(shù) , 否則之后的網(wǎng)絡(luò)操作都會受到影響 ;
上述初始化網(wǎng)絡(luò) , 清理網(wǎng)絡(luò) 操作 , 在使用前初始化 , 使用完畢后清理 ;
使用過程中 , 會創(chuàng)建多個 CNetwork 對象 , 只需要在第一個對象創(chuàng)建前初始化 , 最后一個對象析構(gòu)后清理即可 ;
沒有必要在每個對象中都 執(zhí)行 網(wǎng)絡(luò)的初始化 與 清理操作 ; 因此 WSAPrepare 變量被定義成私有靜態(tài)變量 ;
在 CNetwork.cpp 中聲明了 CNetwork::WSAPrepare CNetwork::wsaforwin; , 確保網(wǎng)絡(luò)一定會被初始化 , 初始化和析構(gòu)時 , 不影響網(wǎng)絡(luò)功能的使用 ;
CNetwork.h 源碼 :
#pragma once#include <WinSock2.h> // WinSock2.h 頭文件 必須在 Windows.h 頭文件前面 #include <Windows.h> // Windows.h 頭文件 必須在 WinSock2.h 頭文件后面#include <SDKDDKVer.h> #include <afxwin.h>#include <stdio.h> #include "../Json/json.h" enum {CMD_READ_DATA = 1,CMD_WRITE_GOLD,CMD_WRITE_EXP };#pragma warning(disable:4996) #pragma comment(lib,"Ws2_32.lib") #define FORMAT_STYLE (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS) class CNetwork { public:CNetwork();~CNetwork();bool WaitClientOnline();//等待客戶端上線bool ReadData(Json::Value& root);//讀取數(shù)據(jù)bool WriteGold(double gold);//修改金幣bool WriteExp(unsigned exp);//修改經(jīng)驗 public:static CString GetErrorString(); private:SOCKET m_server; private:/* 該私有類的作用是用于整體的網(wǎng)絡(luò)初始化在 Windows 中調(diào)用網(wǎng)絡(luò)功能 , 必須執(zhí)行 WSAStartup 初始化函數(shù) , 否則無法使用網(wǎng)絡(luò)功能使用完畢后 , 一定要執(zhí)行 WSACleanup 函數(shù) , 否則之后的網(wǎng)絡(luò)操作都會受到影響上述初始化網(wǎng)絡(luò) , 清理網(wǎng)絡(luò) 操作 , 在使用前初始化 , 使用完畢后清理 ; 使用過程中 , 會創(chuàng)建多個 CNetwork 對象 , 只需要在第一個對象創(chuàng)建前初始化 , 最后一個對象析構(gòu)后清理即可 ; 沒有必要在每個對象中都 執(zhí)行 網(wǎng)絡(luò)的初始化 與 清理操作 ; 因此 WSAPrepare 變量被定義成私有靜態(tài)變量在 CNetwork 中聲明了 CNetwork::WSAPrepare CNetwork::wsaforwin;確保網(wǎng)絡(luò)一定會被初始化 , 初始化和析構(gòu)時 , 不影響網(wǎng)絡(luò)功能的使用*/class WSAPrepare {public:WSAPrepare() {WSADATA data;memset(&data, 0, sizeof(data));int ret = WSAStartup(MAKEWORD(2, 2), &data);if (ret < 0) {printf("網(wǎng)絡(luò)初始化失敗:%s\n", (LPCSTR)CNetwork::GetErrorString());(void)getchar();abort();}}~WSAPrepare() {if (WSACleanup() < 0) {printf("網(wǎng)絡(luò)關(guān)閉失敗:%s\n", (LPCSTR)CNetwork::GetErrorString());}}};/* 私有靜態(tài)成員變量 , 所有的 CNetwork 對象都共享同一個變量 */static WSAPrepare wsaforwin;};總結(jié)
以上是生活随笔為你收集整理的【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | 配置头文件 | 配置编译参数 | 网络初始化 WSAStartup 与清理 WSACleanup 操作 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】Android
- 下一篇: 【Android 逆向】Android