开源的socket服务端客户端,支持C# C++

HPSocket.h 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. /*
  2. * Copyright: JessMA Open Source (ldcsaa@gmail.com)
  3. *
  4. * Version : 4.1.3
  5. * Author : Bruce Liang
  6. * Website : http://www.jessma.org
  7. * Project : https://github.com/ldcsaa
  8. * Blog : http://www.cnblogs.com/ldcsaa
  9. * Wiki : http://www.oschina.net/p/hp-socket
  10. * QQ Group : 75375912
  11. *
  12. * Licensed under the Apache License, Version 2.0 (the "License");
  13. * you may not use this file except in compliance with the License.
  14. * You may obtain a copy of the License at
  15. *
  16. * http://www.apache.org/licenses/LICENSE-2.0
  17. *
  18. * Unless required by applicable law or agreed to in writing, software
  19. * distributed under the License is distributed on an "AS IS" BASIS,
  20. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  21. * See the License for the specific language governing permissions and
  22. * limitations under the License.
  23. */
  24. /******************************************************************************
  25. Module: HPSocket
  26. Usage:
  27. 方法一:
  28. --------------------------------------------------------------------------------------
  29. 0. 应用程序包含 HPTypeDef.h / SocketInterface.h / HPSocket.h 头文件
  30. 1. 调用 HP_Create_Xxx() 函数创建 HPSocket 对象
  31. 2. 使用完毕后调用 HP_Destroy_Xxx() 函数销毁 HPSocket 对象
  32. 方法二:
  33. --------------------------------------------------------------------------------------
  34. 0. 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件
  35. 1. 创建 CXxxPtr 智能指针,通过智能指针使用 HPSocket 对象
  36. Release:
  37. <-- 动态链接库 -->
  38. 1. x86/HPSocket.dll - (32位/MBCS/Release)
  39. 2. x86/HPSocket_D.dll - (32位/MBCS/DeBug)
  40. 3. x86/HPSocket_U.dll - (32位/UNICODE/Release)
  41. 4. x86/HPSocket_UD.dll - (32位/UNICODE/DeBug)
  42. 5. x64/HPSocket.dll - (64位/MBCS/Release)
  43. 6. x64/HPSocket_D.dll - (64位/MBCS/DeBug)
  44. 7. x64/HPSocket_U.dll - (64位/UNICODE/Release)
  45. 8. x64/HPSocket_UD.dll - (64位/UNICODE/DeBug)
  46. <-- 静态链接库 -->
  47. !!注意!!:使用 HPSocket 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIB
  48. 1. x86/static/HPSocket.lib - (32位/MBCS/Release)
  49. 2. x86/static/HPSocket_D.lib - (32位/MBCS/DeBug)
  50. 3. x86/static/HPSocket_U.lib - (32位/UNICODE/Release)
  51. 4. x86/static/HPSocket_UD.lib - (32位/UNICODE/DeBug)
  52. 5. x64/static/HPSocket.lib - (64位/MBCS/Release)
  53. 6. x64/static/HPSocket_D.lib - (64位/MBCS/DeBug)
  54. 7. x64/static/HPSocket_U.lib - (64位/UNICODE/Release)
  55. 8. x64/static/HPSocket_UD.lib - (64位/UNICODE/DeBug)
  56. ******************************************************************************/
  57. #pragma once
  58. /**************************************************/
  59. /*********** imports / exports HPSocket ***********/
  60. #ifdef HPSOCKET_STATIC_LIB
  61. #define HPSOCKET_API EXTERN_C
  62. #else
  63. #ifdef HPSOCKET_EXPORTS
  64. #define HPSOCKET_API EXTERN_C __declspec(dllexport)
  65. #else
  66. #define HPSOCKET_API EXTERN_C __declspec(dllimport)
  67. #endif
  68. #endif
  69. #include "SocketInterface.h"
  70. /*****************************************************************************************************************************************************/
  71. /****************************************************************** TCP/UDP Exports ******************************************************************/
  72. /*****************************************************************************************************************************************************/
  73. /**************************************************/
  74. /************** HPSocket 对象智能指针 **************/
  75. template<class T, class _Listener, class _Creator> class CHPSocketPtr
  76. {
  77. public:
  78. CHPSocketPtr(_Listener* pListener)
  79. {
  80. if(pListener)
  81. m_pObj = _Creator::Create(pListener);
  82. else
  83. m_pObj = nullptr;
  84. }
  85. CHPSocketPtr(BOOL bCreate = TRUE)
  86. {
  87. if(bCreate)
  88. m_pObj = _Creator::Create();
  89. else
  90. m_pObj = nullptr;
  91. }
  92. ~CHPSocketPtr()
  93. {
  94. Reset();
  95. }
  96. public:
  97. CHPSocketPtr& Reset(T* pObj = nullptr)
  98. {
  99. if(pObj != m_pObj)
  100. {
  101. if(m_pObj)
  102. _Creator::Destroy(m_pObj);
  103. m_pObj = pObj;
  104. }
  105. return *this;
  106. }
  107. CHPSocketPtr& Attach(T* pObj)
  108. {
  109. return Reset(pObj);
  110. }
  111. T* Detach()
  112. {
  113. T* pObj = m_pObj;
  114. m_pObj = nullptr;
  115. return pObj;
  116. }
  117. BOOL IsValid () const {return m_pObj != nullptr ;}
  118. T* Get () const {return m_pObj ;}
  119. T* operator -> () const {return m_pObj ;}
  120. operator T* () const {return m_pObj ;}
  121. CHPSocketPtr& operator = (T* pObj) {return Reset(pObj) ;}
  122. private:
  123. CHPSocketPtr(const CHPSocketPtr&);
  124. CHPSocketPtr& operator = (const CHPSocketPtr&);
  125. private:
  126. T* m_pObj;
  127. };
  128. /**************************************************/
  129. /**************** HPSocket 导出函数 ****************/
  130. // 创建 ITcpServer 对象
  131. HPSOCKET_API ITcpServer* HP_Create_TcpServer(ITcpServerListener* pListener);
  132. // 创建 ITcpAgent 对象
  133. HPSOCKET_API ITcpAgent* HP_Create_TcpAgent(ITcpAgentListener* pListener);
  134. // 创建 ITcpClient 对象
  135. HPSOCKET_API ITcpClient* HP_Create_TcpClient(ITcpClientListener* pListener);
  136. // 创建 ITcpPullServer 对象
  137. HPSOCKET_API ITcpPullServer* HP_Create_TcpPullServer(ITcpServerListener* pListener);
  138. // 创建 ITcpPullAgent 对象
  139. HPSOCKET_API ITcpPullAgent* HP_Create_TcpPullAgent(ITcpAgentListener* pListener);
  140. // 创建 ITcpPullClient 对象
  141. HPSOCKET_API ITcpPullClient* HP_Create_TcpPullClient(ITcpClientListener* pListener);
  142. // 创建 ITcpPackServer 对象
  143. HPSOCKET_API ITcpPackServer* HP_Create_TcpPackServer(ITcpServerListener* pListener);
  144. // 创建 ITcpPackAgent 对象
  145. HPSOCKET_API ITcpPackAgent* HP_Create_TcpPackAgent(ITcpAgentListener* pListener);
  146. // 创建 ITcpPackClient 对象
  147. HPSOCKET_API ITcpPackClient* HP_Create_TcpPackClient(ITcpClientListener* pListener);
  148. // 创建 IUdpServer 对象
  149. HPSOCKET_API IUdpServer* HP_Create_UdpServer(IUdpServerListener* pListener);
  150. // 创建 IUdpClient 对象
  151. HPSOCKET_API IUdpClient* HP_Create_UdpClient(IUdpClientListener* pListener);
  152. // 创建 IUdpCast 对象
  153. HPSOCKET_API IUdpCast* HP_Create_UdpCast(IUdpCastListener* pListener);
  154. // 销毁 ITcpServer 对象
  155. HPSOCKET_API void HP_Destroy_TcpServer(ITcpServer* pServer);
  156. // 销毁 ITcpAgent 对象
  157. HPSOCKET_API void HP_Destroy_TcpAgent(ITcpAgent* pAgent);
  158. // 销毁 ITcpClient 对象
  159. HPSOCKET_API void HP_Destroy_TcpClient(ITcpClient* pClient);
  160. // 销毁 ITcpPullServer 对象
  161. HPSOCKET_API void HP_Destroy_TcpPullServer(ITcpPullServer* pServer);
  162. // 销毁 ITcpPullAgent 对象
  163. HPSOCKET_API void HP_Destroy_TcpPullAgent(ITcpPullAgent* pAgent);
  164. // 销毁 ITcpPullClient 对象
  165. HPSOCKET_API void HP_Destroy_TcpPullClient(ITcpPullClient* pClient);
  166. // 销毁 ITcpPackServer 对象
  167. HPSOCKET_API void HP_Destroy_TcpPackServer(ITcpPackServer* pServer);
  168. // 销毁 ITcpPackAgent 对象
  169. HPSOCKET_API void HP_Destroy_TcpPackAgent(ITcpPackAgent* pAgent);
  170. // 销毁 ITcpPackClient 对象
  171. HPSOCKET_API void HP_Destroy_TcpPackClient(ITcpPackClient* pClient);
  172. // 销毁 IUdpServer 对象
  173. HPSOCKET_API void HP_Destroy_UdpServer(IUdpServer* pServer);
  174. // 销毁 IUdpClient 对象
  175. HPSOCKET_API void HP_Destroy_UdpClient(IUdpClient* pClient);
  176. // 销毁 IUdpCast 对象
  177. HPSOCKET_API void HP_Destroy_UdpCast(IUdpCast* pCast);
  178. // ITcpServer 对象创建器
  179. struct TcpServer_Creator
  180. {
  181. static ITcpServer* Create(ITcpServerListener* pListener)
  182. {
  183. return HP_Create_TcpServer(pListener);
  184. }
  185. static void Destroy(ITcpServer* pServer)
  186. {
  187. HP_Destroy_TcpServer(pServer);
  188. }
  189. };
  190. // ITcpAgent 对象创建器
  191. struct TcpAgent_Creator
  192. {
  193. static ITcpAgent* Create(ITcpAgentListener* pListener)
  194. {
  195. return HP_Create_TcpAgent(pListener);
  196. }
  197. static void Destroy(ITcpAgent* pAgent)
  198. {
  199. HP_Destroy_TcpAgent(pAgent);
  200. }
  201. };
  202. // ITcpClient 对象创建器
  203. struct TcpClient_Creator
  204. {
  205. static ITcpClient* Create(ITcpClientListener* pListener)
  206. {
  207. return HP_Create_TcpClient(pListener);
  208. }
  209. static void Destroy(ITcpClient* pClient)
  210. {
  211. HP_Destroy_TcpClient(pClient);
  212. }
  213. };
  214. // ITcpPullServer 对象创建器
  215. struct TcpPullServer_Creator
  216. {
  217. static ITcpPullServer* Create(ITcpServerListener* pListener)
  218. {
  219. return HP_Create_TcpPullServer(pListener);
  220. }
  221. static void Destroy(ITcpPullServer* pServer)
  222. {
  223. HP_Destroy_TcpPullServer(pServer);
  224. }
  225. };
  226. // ITcpPullAgent 对象创建器
  227. struct TcpPullAgent_Creator
  228. {
  229. static ITcpPullAgent* Create(ITcpAgentListener* pListener)
  230. {
  231. return HP_Create_TcpPullAgent(pListener);
  232. }
  233. static void Destroy(ITcpPullAgent* pAgent)
  234. {
  235. HP_Destroy_TcpPullAgent(pAgent);
  236. }
  237. };
  238. // ITcpPullClient 对象创建器
  239. struct TcpPullClient_Creator
  240. {
  241. static ITcpPullClient* Create(ITcpClientListener* pListener)
  242. {
  243. return HP_Create_TcpPullClient(pListener);
  244. }
  245. static void Destroy(ITcpPullClient* pClient)
  246. {
  247. HP_Destroy_TcpPullClient(pClient);
  248. }
  249. };
  250. // ITcpPackServer 对象创建器
  251. struct TcpPackServer_Creator
  252. {
  253. static ITcpPackServer* Create(ITcpServerListener* pListener)
  254. {
  255. return HP_Create_TcpPackServer(pListener);
  256. }
  257. static void Destroy(ITcpPackServer* pServer)
  258. {
  259. HP_Destroy_TcpPackServer(pServer);
  260. }
  261. };
  262. // ITcpPackAgent 对象创建器
  263. struct TcpPackAgent_Creator
  264. {
  265. static ITcpPackAgent* Create(ITcpAgentListener* pListener)
  266. {
  267. return HP_Create_TcpPackAgent(pListener);
  268. }
  269. static void Destroy(ITcpPackAgent* pAgent)
  270. {
  271. HP_Destroy_TcpPackAgent(pAgent);
  272. }
  273. };
  274. // ITcpPackClient 对象创建器
  275. struct TcpPackClient_Creator
  276. {
  277. static ITcpPackClient* Create(ITcpClientListener* pListener)
  278. {
  279. return HP_Create_TcpPackClient(pListener);
  280. }
  281. static void Destroy(ITcpPackClient* pClient)
  282. {
  283. HP_Destroy_TcpPackClient(pClient);
  284. }
  285. };
  286. // IUdpServer 对象创建器
  287. struct UdpServer_Creator
  288. {
  289. static IUdpServer* Create(IUdpServerListener* pListener)
  290. {
  291. return HP_Create_UdpServer(pListener);
  292. }
  293. static void Destroy(IUdpServer* pServer)
  294. {
  295. HP_Destroy_UdpServer(pServer);
  296. }
  297. };
  298. // IUdpClient 对象创建器
  299. struct UdpClient_Creator
  300. {
  301. static IUdpClient* Create(IUdpClientListener* pListener)
  302. {
  303. return HP_Create_UdpClient(pListener);
  304. }
  305. static void Destroy(IUdpClient* pClient)
  306. {
  307. HP_Destroy_UdpClient(pClient);
  308. }
  309. };
  310. // IUdpClient 对象创建器
  311. struct UdpCast_Creator
  312. {
  313. static IUdpCast* Create(IUdpCastListener* pListener)
  314. {
  315. return HP_Create_UdpCast(pListener);
  316. }
  317. static void Destroy(IUdpCast* pCast)
  318. {
  319. HP_Destroy_UdpCast(pCast);
  320. }
  321. };
  322. // ITcpServer 对象智能指针
  323. typedef CHPSocketPtr<ITcpServer, ITcpServerListener, TcpServer_Creator> CTcpServerPtr;
  324. // ITcpAgent 对象智能指针
  325. typedef CHPSocketPtr<ITcpAgent, ITcpAgentListener, TcpAgent_Creator> CTcpAgentPtr;
  326. // ITcpClient 对象智能指针
  327. typedef CHPSocketPtr<ITcpClient, ITcpClientListener, TcpClient_Creator> CTcpClientPtr;
  328. // ITcpPullServer 对象智能指针
  329. typedef CHPSocketPtr<ITcpPullServer, ITcpServerListener, TcpPullServer_Creator> CTcpPullServerPtr;
  330. // ITcpPullAgent 对象智能指针
  331. typedef CHPSocketPtr<ITcpPullAgent, ITcpAgentListener, TcpPullAgent_Creator> CTcpPullAgentPtr;
  332. // ITcpPullClient 对象智能指针
  333. typedef CHPSocketPtr<ITcpPullClient, ITcpClientListener, TcpPullClient_Creator> CTcpPullClientPtr;
  334. // ITcpPackServer 对象智能指针
  335. typedef CHPSocketPtr<ITcpPackServer, ITcpServerListener, TcpPackServer_Creator> CTcpPackServerPtr;
  336. // ITcpPackAgent 对象智能指针
  337. typedef CHPSocketPtr<ITcpPackAgent, ITcpAgentListener, TcpPackAgent_Creator> CTcpPackAgentPtr;
  338. // ITcpPackClient 对象智能指针
  339. typedef CHPSocketPtr<ITcpPackClient, ITcpClientListener, TcpPackClient_Creator> CTcpPackClientPtr;
  340. // IUdpServer 对象智能指针
  341. typedef CHPSocketPtr<IUdpServer, IUdpServerListener, UdpServer_Creator> CUdpServerPtr;
  342. // IUdpClient 对象智能指针
  343. typedef CHPSocketPtr<IUdpClient, IUdpClientListener, UdpClient_Creator> CUdpClientPtr;
  344. // IUdpCast 对象智能指针
  345. typedef CHPSocketPtr<IUdpCast, IUdpCastListener, UdpCast_Creator> CUdpCastPtr;
  346. /*****************************************************************************************************************************************************/
  347. /******************************************************************** HTTP Exports *******************************************************************/
  348. /*****************************************************************************************************************************************************/
  349. // 创建 IHttpServer 对象
  350. HPSOCKET_API IHttpServer* HP_Create_HttpServer(IHttpServerListener* pListener);
  351. // 创建 IHttpAgent 对象
  352. HPSOCKET_API IHttpAgent* HP_Create_HttpAgent(IHttpAgentListener* pListener);
  353. // 创建 IHttpClient 对象
  354. HPSOCKET_API IHttpClient* HP_Create_HttpClient(IHttpClientListener* pListener);
  355. // 创建 IHttpSyncClient 对象
  356. HPSOCKET_API IHttpSyncClient* HP_Create_HttpSyncClient();
  357. // 销毁 IHttpServer 对象
  358. HPSOCKET_API void HP_Destroy_HttpServer(IHttpServer* pServer);
  359. // 销毁 IHttpAgent 对象
  360. HPSOCKET_API void HP_Destroy_HttpAgent(IHttpAgent* pAgent);
  361. // 销毁 IHttpClient 对象
  362. HPSOCKET_API void HP_Destroy_HttpClient(IHttpClient* pClient);
  363. // 销毁 IHttpSyncClient 对象
  364. HPSOCKET_API void HP_Destroy_HttpSyncClient(IHttpSyncClient* pClient);
  365. // IHttpServer 对象创建器
  366. struct HttpServer_Creator
  367. {
  368. static IHttpServer* Create(IHttpServerListener* pListener)
  369. {
  370. return HP_Create_HttpServer(pListener);
  371. }
  372. static void Destroy(IHttpServer* pServer)
  373. {
  374. HP_Destroy_HttpServer(pServer);
  375. }
  376. };
  377. // IHttpAgent 对象创建器
  378. struct HttpAgent_Creator
  379. {
  380. static IHttpAgent* Create(IHttpAgentListener* pListener)
  381. {
  382. return HP_Create_HttpAgent(pListener);
  383. }
  384. static void Destroy(IHttpAgent* pAgent)
  385. {
  386. HP_Destroy_HttpAgent(pAgent);
  387. }
  388. };
  389. // IHttpClient 对象创建器
  390. struct HttpClient_Creator
  391. {
  392. static IHttpClient* Create(IHttpClientListener* pListener)
  393. {
  394. return HP_Create_HttpClient(pListener);
  395. }
  396. static void Destroy(IHttpClient* pClient)
  397. {
  398. HP_Destroy_HttpClient(pClient);
  399. }
  400. };
  401. // IHttpSyncClient 对象创建器
  402. struct HttpSyncClient_Creator
  403. {
  404. static IHttpSyncClient* Create()
  405. {
  406. return HP_Create_HttpSyncClient();
  407. }
  408. static void Destroy(IHttpSyncClient* pClient)
  409. {
  410. HP_Destroy_HttpSyncClient(pClient);
  411. }
  412. };
  413. // IHttpServer 对象智能指针
  414. typedef CHPSocketPtr<IHttpServer, IHttpServerListener, HttpServer_Creator> CHttpServerPtr;
  415. // IHttpAgent 对象智能指针
  416. typedef CHPSocketPtr<IHttpAgent, IHttpAgentListener, HttpAgent_Creator> CHttpAgentPtr;
  417. // IHttpClient 对象智能指针
  418. typedef CHPSocketPtr<IHttpClient, IHttpClientListener, HttpClient_Creator> CHttpClientPtr;
  419. // IHttpSyncClient 对象智能指针
  420. typedef CHPSocketPtr<IHttpSyncClient, BOOL, HttpSyncClient_Creator> CHttpSyncClientPtr;
  421. /*****************************************************************************************************************************************************/
  422. /*************************************************************** Global Function Exports *************************************************************/
  423. /*****************************************************************************************************************************************************/
  424. // 获取 HPSocket 版本号(4 个字节分别为:主版本号,子版本号,修正版本号,构建编号)
  425. HPSOCKET_API DWORD HP_GetHPSocketVersion();
  426. // 获取错误描述文本
  427. HPSOCKET_API LPCTSTR HP_GetSocketErrorDesc(EnSocketError enCode);
  428. // 调用系统的 GetLastError() 方法获取系统错误代码
  429. HPSOCKET_API DWORD SYS_GetLastError ();
  430. // 调用系统的 WSAGetLastError() 方法获取系统错误代码
  431. HPSOCKET_API int SYS_WSAGetLastError();
  432. // 调用系统的 setsockopt()
  433. HPSOCKET_API int SYS_SetSocketOption(SOCKET sock, int level, int name, LPVOID val, int len);
  434. // 调用系统的 getsockopt()
  435. HPSOCKET_API int SYS_GetSocketOption(SOCKET sock, int level, int name, LPVOID val, int* len);
  436. // 调用系统的 ioctlsocket()
  437. HPSOCKET_API int SYS_IoctlSocket(SOCKET sock, long cmd, u_long* arg);
  438. // 调用系统的 WSAIoctl()
  439. HPSOCKET_API int SYS_WSAIoctl(SOCKET sock, DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbBytesReturned);
  440. // 设置 socket 选项:IPPROTO_TCP -> TCP_NODELAY
  441. HPSOCKET_API int SYS_SSO_NoDelay(SOCKET sock, BOOL bNoDelay);
  442. // 设置 socket 选项:SOL_SOCKET -> SO_DONTLINGER
  443. HPSOCKET_API int SYS_SSO_DontLinger(SOCKET sock, BOOL bDont);
  444. // 设置 socket 选项:SOL_SOCKET -> SO_LINGER
  445. HPSOCKET_API int SYS_SSO_Linger(SOCKET sock, USHORT l_onoff, USHORT l_linger);
  446. // 设置 socket 选项:SOL_SOCKET -> SO_RCVBUF
  447. HPSOCKET_API int SYS_SSO_RecvBuffSize(SOCKET sock, int size);
  448. // 设置 socket 选项:SOL_SOCKET -> SO_SNDBUF
  449. HPSOCKET_API int SYS_SSO_SendBuffSize(SOCKET sock, int size);
  450. // 设置 socket 选项:SOL_SOCKET -> SO_REUSEADDR
  451. HPSOCKET_API int SYS_SSO_ReuseAddress(SOCKET sock, BOOL bReuse);
  452. // 获取 SOCKET 本地地址信息
  453. HPSOCKET_API BOOL SYS_GetSocketLocalAddress(SOCKET socket, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort);
  454. // 获取 SOCKET 远程地址信息
  455. HPSOCKET_API BOOL SYS_GetSocketRemoteAddress(SOCKET socket, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort);
  456. /* IPv4 字符串地址转换为整数 */
  457. HPSOCKET_API ULONG SYS_GetIPv4InAddr(LPCTSTR lpszAddress);
  458. /* 检查字符串是否符合 IP 地址格式 */
  459. HPSOCKET_API BOOL SYS_IsIPAddress(LPCTSTR lpszAddress);
  460. /* 通过主机名获取 IP 地址 */
  461. HPSOCKET_API BOOL SYS_GetIPAddress(LPCTSTR lpszHost, TCHAR lpszIP[], int& iIPLenth);
  462. /* 通过主机名获取最优的 IP 地址 */
  463. HPSOCKET_API BOOL SYS_GetOptimalIPByHostName(LPCTSTR lpszHost, ULONG& ulAddr);
  464. /* 64 位网络字节序转主机字节序 */
  465. HPSOCKET_API ULONGLONG SYS_NToH64(ULONGLONG value);
  466. /* 64 位主机字节序转网络字节序 */
  467. HPSOCKET_API ULONGLONG SYS_HToN64(ULONGLONG value);
  468. // CP_XXX -> UNICODE
  469. HPSOCKET_API BOOL SYS_CodePageToUnicode(int iCodePage, const char szSrc[], WCHAR szDest[], int& iDestLength);
  470. // UNICODE -> CP_XXX
  471. HPSOCKET_API BOOL SYS_UnicodeToCodePage(int iCodePage, const WCHAR szSrc[], char szDest[], int& iDestLength);
  472. // GBK -> UNICODE
  473. HPSOCKET_API BOOL SYS_GbkToUnicode(const char szSrc[], WCHAR szDest[], int& iDestLength);
  474. // UNICODE -> GBK
  475. HPSOCKET_API BOOL SYS_UnicodeToGbk(const WCHAR szSrc[], char szDest[], int& iDestLength);
  476. // UTF8 -> UNICODE
  477. HPSOCKET_API BOOL SYS_Utf8ToUnicode(const char szSrc[], WCHAR szDest[], int& iDestLength);
  478. // UNICODE -> UTF8
  479. HPSOCKET_API BOOL SYS_UnicodeToUtf8(const WCHAR szSrc[], char szDest[], int& iDestLength);
  480. // GBK -> UTF8
  481. HPSOCKET_API BOOL SYS_GbkToUtf8(const char szSrc[], char szDest[], int& iDestLength);
  482. // UTF8 -> GBK
  483. HPSOCKET_API BOOL SYS_Utf8ToGbk(const char szSrc[], char szDest[], int& iDestLength);
  484. // 普通压缩(返回值:0 -> 成功,-3 -> 输入数据不正确,-5 -> 输出缓冲区不足)
  485. HPSOCKET_API int SYS_Compress(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen);
  486. // 高级压缩(返回值:0 -> 成功,-3 -> 输入数据不正确,-5 -> 输出缓冲区不足)
  487. //(默认参数:iLevel -> -1,iMethod -> 8,iWindowBits -> 15,iMemLevel -> 8,iStrategy -> 0)
  488. HPSOCKET_API int SYS_CompressEx(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen, int iLevel = -1, int iMethod = 8, int iWindowBits = 15, int iMemLevel = 8, int iStrategy = 0);
  489. // 普通解压(返回值:0 -> 成功,-3 -> 输入数据不正确,-5 -> 输出缓冲区不足)
  490. HPSOCKET_API int SYS_Uncompress(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen);
  491. // 高级解压(返回值:0 -> 成功,-3 -> 输入数据不正确,-5 -> 输出缓冲区不足)
  492. //(默认参数:iWindowBits -> 15)
  493. HPSOCKET_API int SYS_UncompressEx(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen, int iWindowBits = 15);
  494. // 推测压缩结果长度
  495. HPSOCKET_API DWORD SYS_GuessCompressBound(DWORD dwSrcLen, BOOL bGZip = FALSE);
  496. // Gzip 压缩(返回值:0 -> 成功,-3 -> 输入数据不正确,-5 -> 输出缓冲区不足)
  497. HPSOCKET_API int SYS_GZipCompress(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen);
  498. // Gzip 解压(返回值:0 -> 成功,-3 -> 输入数据不正确,-5 -> 输出缓冲区不足)
  499. HPSOCKET_API int SYS_GZipUncompress(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen);
  500. // 推测 Gzip 解压结果长度(如果返回 0 或不合理值则说明输入内容并非有效的 Gzip 格式)
  501. HPSOCKET_API DWORD SYS_GZipGuessUncompressBound(const BYTE* lpszSrc, DWORD dwSrcLen);
  502. // 计算 Base64 编码后长度
  503. HPSOCKET_API DWORD SYS_GuessBase64EncodeBound(DWORD dwSrcLen);
  504. // 计算 Base64 解码后长度
  505. HPSOCKET_API DWORD SYS_GuessBase64DecodeBound(const BYTE* lpszSrc, DWORD dwSrcLen);
  506. // Base64 编码(返回值:0 -> 成功,-3 -> 输入数据不正确,-5 -> 输出缓冲区不足)
  507. HPSOCKET_API int SYS_Base64Encode(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen);
  508. // Base64 解码(返回值:0 -> 成功,-3 -> 输入数据不正确,-5 -> 输出缓冲区不足)
  509. HPSOCKET_API int SYS_Base64Decode(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen);
  510. // 计算 URL 编码后长度
  511. HPSOCKET_API DWORD SYS_GuessUrlEncodeBound(const BYTE* lpszSrc, DWORD dwSrcLen);
  512. // 计算 URL 解码后长度
  513. HPSOCKET_API DWORD SYS_GuessUrlDecodeBound(const BYTE* lpszSrc, DWORD dwSrcLen);
  514. // URL 编码(返回值:0 -> 成功,-3 -> 输入数据不正确,-5 -> 输出缓冲区不足)
  515. HPSOCKET_API int SYS_UrlEncode(BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen);
  516. // URL 解码(返回值:0 -> 成功,-3 -> 输入数据不正确,-5 -> 输出缓冲区不足)
  517. HPSOCKET_API int SYS_UrlDecode(BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen);