# Win32RDP **Repository Path**: yiyefangzhou24/win32-rdp ## Basic Information - **Project Name**: Win32RDP - **Description**: 该程序旨在演示分块远程桌面传输算法。 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2022-12-06 - **Last Updated**: 2024-05-27 ## Categories & Tags **Categories**: web-dev-toolkits **Tags**: None ## README ### 分块远程桌面传输算法 #### 介绍 该程序旨在演示分块远程桌面传输算法。 #### 通讯协议 在开启远程桌面数据传输之前,客户端要和服务器协商显示的分辨率等参数。这里设定的是以服务器选择的分辨率作为显示标准,具体通讯过程如下: 1、客户端向服务器的协议通讯端口(默认为20000,可在服务端自定义)发起连接。 2、服务器收到连接之后,将用户设定好的参数分发给客户端 3、协议通讯完成。 #### 程序总体架构 ![Image text](https://gitee.com/yiyefangzhou24/win32-rdp/raw/master/doc/global.PNG) #### 几个要说明的问题 **1、位图比较算法选择问题** 分块截图后的数据需要与上一次位图块数据进行比较,如果有变化,则发送给服务器更新显示,否则不变化。此前较多采用的是按位异或算法,这里采用的比较算法是openssl的md5算法,散列算法的优点也很明显,算法成熟、速度快,如果每个位图块的变化较小,md5算法的优势就会比较明显。 **2、程序效率问题** 较博客中的版本,该版本在效率上做了大幅优化,主要体现在:所有的循环内部使用new和malloc开辟内存的方式全部替换为内存池,避免频繁开辟和释放带来的程序开销,也降低了内存泄露的概率,具体参考MemoryPool.h中函数定义。 **3、WinSocket粘包问题** 本程序在winsocket基础上,封装了自定义的通讯协议,用于解决WinSocket粘包问题,使开发者无需关心socket发送和接收,具体参见SocketCpp.h。socket通讯类中也使用了MemoryPool提高程序效率。 **4、第三方库编译** 本程序使用了zlib和openssl第三方库,分别用于位图数据压缩和计算MD5值。zlib库编译已经包含在vs中,已经设置好项目依赖,无需手动操作;openssl库需要ActivePerl编译,本程序已经编译好,头文件和静态库在openssl-1.0.1e\output文件夹中,已经设置包含在vs中,无需手动配置。 #### 编译环境 VisualStudio 2013 + windows10 64位 #### 联系方式 如果您在使用这个项目的过程中遇到任何问题,或者您对我的项目有任何意见或者建议,再或者有不错的想法欢迎与我交流,邮件:**yiyefangzhou24@qq.com**。