- > Bug Fix:
- -----------------
修复 IP 地址推断错误 Bug
?
) client 连接 server 时, 假设 server IP 地址满位(12 个数字:'AAA.BBB.CCC.DDD').IP 地址解析错误
) 影响组件: 全部 TCP/UDP client 组件
) 影响版本号: v3.1.2 及之前全部版本号
?
修复域名或主机名的 IP 地址解析错误 Bug
?
) client 组件通过域名或主机名连接 server 时, 可能会解析到错误的 IP 地址
) 影响组件: 全部 TCP/UDP client 组件
) 影响版本号: v3.1.2 及之前全部版本号
*** v3.1.2 更新 ***
?> 改动 Server 组件的 OnClose() / OnError() 事件的触发规则:
-----------------
曾经版本号的 TCP/UDP Server 组件中, 当关闭一个连接时可能会同一时候触发一个 OnClose() 事件和若干个 OnError() 事件
因为存在上述可能性, 所以应用程序须要对 OnClose() / OnError() 的处理事件代码段进行同步
从 v3.1.2 開始, 当多个 OnClose() / OnError() 事件同一时候发生时, 组件仅仅会向应用程序通知第一个事件, 兴许事件则忽略
因此, 应用程序在处理 OnClose() / OnError() 事件时不必处理同步. 降低了出错的可能和编写同步及检測代码的负担
演示样例代码
- /* 演示样例代码一:*/
- /*----------------------------------------------------------------------------*/
- ISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)
- {
- // 曾经版本号: 有可能存在并发的 OnClose()/OnError(). 要把代码放在临界区中并检測返回值
- CCriSecLock locallock(m_csPkgInfo); // <-- 临界区
- PVOID pInfo = nullptr;
- // <-- 检測返回值
- if(m_Server->GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr)
- {
- m_Server->SetConnectionExtra(dwConnID, nullptr);
- delete pInfo;
- }
- }
- /* 演示样例代码二:*/
- /*----------------------------------------------------------------------------*/
- ISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)
- {
- // v3.1.2 版本号: 仅仅会接收到一个 OnClose()/OnError() 事件, 能安全地移除临界区代码和检測代码
- PVOID pInfo = nullptr;
- m_Server->GetConnectionExtra(dwConnID, &pInfo);
- ASSERT(pInfo != nullptr);
- delete pInfo;
- }
*** v3.1.1 更新 ***
?> 添加导出纯 C 函数的动态链接库 HPSocket4C.dll:
-----------------
添加代码文件 HPSocket4C.h 和 HPSocket4C.cpp, 用于创建 HPSocket4C.dll
导出纯 C 函数, 让其他语言 (如: C/C#/Delphi 等) 能方便地使用 HPSocket
HPSocket4C.dll 用法
方法一:
------------------------------------------------------------------------------
(0) (C/C++ 程序)包括 HPSocket4C.h 头文件
(1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象
(2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象
(3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数
(4) 调用相关导出函数操作 HPSocket 对象
(5) ...... ......
(6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象
(7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象
方法二:
------------------------------------------------------------------------------
(1) 应用程序把须要用到的导出函数封装到特定语言的包装类中
(2) 通过包装类封装后, 以面向对象的方式使用 HPSocket
动态链接库发行版本号
- (1) x86/HPSocket4C.dll - (32 位 / MBCS/Release)
- (2) x86/HPSocket4C_D.dll - (32 位 / MBCS/DeBug)
- (3) x86/HPSocket4C_U.dll - (32 位 / UNICODE/Release)
- (4) x86/HPSocket4C_UD.dll - (32 位 / UNICODE/DeBug)
- (5) x64/HPSocket4C.dll - (64 位 / MBCS/Release)
- (6) x64/HPSocket4C_D.dll - (64 位 / MBCS/DeBug)
- (7) x64/HPSocket4C_U.dll - (64 位 / UNICODE/Release)
- (8) x64/HPSocket4C_UD.dll - (64 位 / UNICODE/DeBug)
> 全面启用 Buffer Pool 缓存机制:
-----------------
Common/Src 添加代码文件 bufferpool.h 和 bufferpool.cpp, 实现 Buffer Pool 缓存机制
通过 Buffer Pool 缓存机制提升内存使用效率. 降低动态内存分配和释放操作. 避免内存空洞
ICTcpClient 用 CItemPool 和 TItemList 实现发送缓冲区
CUdpClient 用 CItemPool 和 TItemList 实现发送缓冲区
CTcpPullClient 用 CItemPool 和 TItemList 实现发送缓冲区和 PULL 缓冲区
CTcpPullServer 用 CBufferPool 和 TBuffer 实现 PULL 缓冲区
*** v3.0.2 更新 ***
?> 把 HP-Socket 编译为动态链接库:
-----------------
应用程序能够通过导入源码或动态链接库方式使用 HP-Socket
动态链接库用法
方法一:
------------------------------------------------------------------------------
(0) 应用程序包括 SocketInterface.h 和 HPSocket.h 头文件
(1) 调用 HP_Create_Xxx() 函数创建 HPSocket 对象
(2) 使用完成后调用 HP_Destroy_Xxx() 函数销毁 HPSocket 对象
方法二:
------------------------------------------------------------------------------
(0) 应用程序包括 SocketInterface.h 和 HPSocket.h 头文件
(1) 创建 CXxxWrapper 包装器, 通过包装器智能指针使用 HPSocket 对象
动态链接库发行版本号
- (1) x86/HPSocket.dll - (32 位 / MBCS/Release)
- (2) x86/HPSocket_D.dll - (32 位 / MBCS/DeBug)
- (3) x86/HPSocket_U.dll - (32 位 / UNICODE/Release)
- (4) x86/HPSocket_UD.dll - (32 位 / UNICODE/DeBug)
- (5) x64/HPSocket.dll - (64 位 / MBCS/Release)
- (6) x64/HPSocket_D.dll - (64 位 / MBCS/DeBug)
- (7) x64/HPSocket_U.dll - (64 位 / UNICODE/Release)
- (8) x64/HPSocket_UD.dll - (64 位 / UNICODE/DeBug)
*** v3.0.1 更新 ***
?> 新增 UDP 通信组件:
-----------------
新增两个 UDP 通信组件: CUdpServer 为服务端组件, CUdpClient 为 client 组件
服务端组件 CUdpServer 採用 IOCP 通信模型
client 组件 CUdpClient 採用 Event Select 通信模型
UDP 通信组件的接口与原 TCP 通信组件一致. 简单有用
UDP 通信组件内置通信线路自己主动监測机制
新增 UDP 通信组件演示样例 project TestEcho-UDP
> 代码重构与优化:
-----------------
规范全部接口, 类以及代码文件的命名
重构和优化了大量组件代码
服务端组件添加读写锁机制, 有效平衡处理性能与安全性
服务端组件的 Socket 对象缓存列表设置了锁定时间, 提高訪问的安全性
来源: http://www.bubuko.com/infodetail-2992203.html