【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | 配置头文件 | 配置编译参数 | 网络初始化 WSAStartup 与清理 WSACleanup 操作 )
文章目錄
- 前言
- 一、開發前的配置 ( 頭文件 | 編譯參數設置 )
- 二、網絡初始化 WSAStartup 與清理 WSACleanup 操作
前言
本篇博客重點分析 CNetwork 網絡模塊 ;
一、開發前的配置 ( 頭文件 | 編譯參數設置 )
Windows 中引入網絡套接字頭文件注意事項 : 必須先引入 WinSock2.h 頭文件 , 然后 再引入 Windows.h 頭文件 , 否則會報錯 ;
#include <WinSock2.h> // WinSock2.h 頭文件 必須在 Windows.h 頭文件前面 #include <Windows.h> // Windows.h 頭文件 必須在 WinSock2.h 頭文件后面使用代碼 記錄 編譯參數選項 :
#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)二、網絡初始化 WSAStartup 與清理 WSACleanup 操作
在 CNetwork 中 , 定義了一個 WSAPrepare 私有類 ,
在 Windows 中調用網絡功能 , 必須執行 WSAStartup 初始化函數 , 否則無法使用網絡功能 ; 使用完畢后 , 一定要執行 WSACleanup 函數 , 否則之后的網絡操作都會受到影響 ;
上述初始化網絡 , 清理網絡 操作 , 在使用前初始化 , 使用完畢后清理 ;
使用過程中 , 會創建多個 CNetwork 對象 , 只需要在第一個對象創建前初始化 , 最后一個對象析構后清理即可 ;
沒有必要在每個對象中都 執行 網絡的初始化 與 清理操作 ; 因此 WSAPrepare 變量被定義成私有靜態變量 ;
在 CNetwork.cpp 中聲明了 CNetwork::WSAPrepare CNetwork::wsaforwin; , 確保網絡一定會被初始化 , 初始化和析構時 , 不影響網絡功能的使用 ;
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);//讀取數據bool WriteGold(double gold);//修改金幣bool WriteExp(unsigned exp);//修改經驗 public:static CString GetErrorString(); private:SOCKET m_server; private:/* 該私有類的作用是用于整體的網絡初始化在 Windows 中調用網絡功能 , 必須執行 WSAStartup 初始化函數 , 否則無法使用網絡功能使用完畢后 , 一定要執行 WSACleanup 函數 , 否則之后的網絡操作都會受到影響上述初始化網絡 , 清理網絡 操作 , 在使用前初始化 , 使用完畢后清理 ; 使用過程中 , 會創建多個 CNetwork 對象 , 只需要在第一個對象創建前初始化 , 最后一個對象析構后清理即可 ; 沒有必要在每個對象中都 執行 網絡的初始化 與 清理操作 ; 因此 WSAPrepare 變量被定義成私有靜態變量在 CNetwork 中聲明了 CNetwork::WSAPrepare CNetwork::wsaforwin;確保網絡一定會被初始化 , 初始化和析構時 , 不影響網絡功能的使用*/class WSAPrepare {public:WSAPrepare() {WSADATA data;memset(&data, 0, sizeof(data));int ret = WSAStartup(MAKEWORD(2, 2), &data);if (ret < 0) {printf("網絡初始化失敗:%s\n", (LPCSTR)CNetwork::GetErrorString());(void)getchar();abort();}}~WSAPrepare() {if (WSACleanup() < 0) {printf("網絡關閉失敗:%s\n", (LPCSTR)CNetwork::GetErrorString());}}};/* 私有靜態成員變量 , 所有的 CNetwork 對象都共享同一個變量 */static WSAPrepare wsaforwin;};總結
以上是生活随笔為你收集整理的【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | 配置头文件 | 配置编译参数 | 网络初始化 WSAStartup 与清理 WSACleanup 操作 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】Android
- 下一篇: 【Android 逆向】Android