1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | 配置头文件 |

【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | 配置头文件 |

时间:2021-08-15 06:22:55

相关推荐

【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | 配置头文件 |

文章目录

前言一、开发前的配置 ( 头文件 | 编译参数设置 )二、网络初始化 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 操作 )

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。