远程桌面控制(一)
远程桌面控制(一)
wyp单例模式是怎么实现的
1 | class CServerSocket { |
设计思想:
- 禁止用户直接构造,必须通过
getInstance()
获取唯一对象。 CHelper
辅助类:- 构造时自动创建
CServerSocket
单例。 - 析构时自动释放,防止内存泄漏。
- 构造时自动创建
总结
模块 | 核心功能 |
---|---|
CPacket |
协议封装,提供 打包/解包 能力 |
CServerSocket |
服务器核心,单例管理、收发数据 |
单例模式 | 确保全局唯一服务器实例 |
字节对齐 (#pragma pack ) |
保证数据包严格对齐,避免解析错误 |
适用场景:
- 小型客户端-服务器通信(如文件传输、远程控制等)。
- 可扩展性较强,
sCmd
可用于扩展不同业务逻辑。
1 | CServerSocket* CServerSocket::m_instance = NULL; // 静态成员初始化 |
设计模式解析
单例控制
m_instance
作为静态指针,保证全进程唯一实例- 通过
getInstance()
获取唯一实例,首次调用时构造对象
RAII助手类 (
CHelper
)1
class CHelper {public: CHelper() { CServerSocket::getInstance(); } // 构造时触发单例创建 ~CHelper() { CServerSocket::releaseInstance(); } // 析构时释放单例};
- 构造阶段:程序启动时,全局
m_helper
的构造自动触发单例创建 - 析构阶段:程序退出时,自动调用
releaseInstance()
释放资源
- 构造阶段:程序启动时,全局
全局访问点
pserver
提供全局统一访问入口使用示例:
1
pserver->InitSocket(); // 任何地方都可直接使用
CPacket
打包构造函数
构造函数原型
1 | CPacket::CPacket(WORD nCmd, const BYTE* pData, size_t nSize) |
参数说明
参数 | 类型 | 说明 |
---|---|---|
nCmd |
WORD |
协议命令字(2字节) |
pData |
const BYTE* |
负载数据指针 |
nSize |
size_t |
负载数据长度 |
主程序
1 | // RemoveCtrl.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果