Sdk_x64.cs 87 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.InteropServices;
  6. using System.Security.Cryptography;
  7. using System.IO;
  8. namespace HPSocketCS
  9. {
  10. /// <summary>
  11. /// Unicode版本
  12. /// </summary>
  13. public class Sdk_x64
  14. {
  15. /// <summary>
  16. /// HPSocket的文件路径
  17. /// </summary>
  18. #if DEBUG
  19. private const string HPSOCKET_DLL_PATH = "HPSocket4C_UD_x64.dll";
  20. #else
  21. private const string HPSOCKET_DLL_PATH = "HPSocket4C_U_x64.dll";
  22. #endif
  23. /*****************************************************************************************************/
  24. /******************************************** 公共类、接口 ********************************************/
  25. /*****************************************************************************************************/
  26. /****************************************************/
  27. /************** HPSocket4C.dll 导出函数 **************/
  28. /// <summary>
  29. /// 创建 TcpServer 对象
  30. /// </summary>
  31. /// <param name="pListener"></param>
  32. /// <returns></returns>
  33. [DllImport(HPSOCKET_DLL_PATH)]
  34. public static extern IntPtr Create_HP_TcpServer(IntPtr pListener);
  35. /// <summary>
  36. /// 创建 TcpClient 对象
  37. /// </summary>
  38. /// <param name="pListener"></param>
  39. /// <returns></returns>
  40. [DllImport(HPSOCKET_DLL_PATH)]
  41. public static extern IntPtr Create_HP_TcpClient(IntPtr pListener);
  42. /// <summary>
  43. /// 创建 TcpAgent 对象
  44. /// </summary>
  45. /// <param name="pListener"></param>
  46. /// <returns></returns>
  47. [DllImport(HPSOCKET_DLL_PATH)]
  48. public static extern IntPtr Create_HP_TcpAgent(IntPtr pListener);
  49. /// <summary>
  50. /// 创建 TcpPullServer 对象
  51. /// </summary>
  52. /// <param name="pListener"></param>
  53. /// <returns></returns>
  54. [DllImport(HPSOCKET_DLL_PATH)]
  55. public static extern IntPtr Create_HP_TcpPullServer(IntPtr pListener);
  56. /// <summary>
  57. /// 创建 TcpPullClient 对象
  58. /// </summary>
  59. /// <param name="pListener"></param>
  60. /// <returns></returns>
  61. [DllImport(HPSOCKET_DLL_PATH)]
  62. public static extern IntPtr Create_HP_TcpPullClient(IntPtr pListener);
  63. /// <summary>
  64. /// 创建 TcpPullAgent 对象
  65. /// </summary>
  66. /// <param name="pListener"></param>
  67. /// <returns></returns>
  68. [DllImport(HPSOCKET_DLL_PATH)]
  69. public static extern IntPtr Create_HP_TcpPullAgent(IntPtr pListener);
  70. /// <summary>
  71. /// 创建 HP_TcpPackServer 对象
  72. /// </summary>
  73. /// <param name="pListener"></param>
  74. /// <returns></returns>
  75. [DllImport(HPSOCKET_DLL_PATH)]
  76. public static extern IntPtr Create_HP_TcpPackServer(IntPtr pListener);
  77. /// <summary>
  78. /// 创建 HP_TcpPackAgent 对象
  79. /// </summary>
  80. /// <param name="pListener"></param>
  81. /// <returns></returns>
  82. [DllImport(HPSOCKET_DLL_PATH)]
  83. public static extern IntPtr Create_HP_TcpPackAgent(IntPtr pListener);
  84. /// <summary>
  85. /// 创建 HP_TcpPackAgent 对象
  86. /// </summary>
  87. /// <param name="pListener"></param>
  88. /// <returns></returns>
  89. [DllImport(HPSOCKET_DLL_PATH)]
  90. public static extern IntPtr Create_HP_TcpPackClient(IntPtr pListener);
  91. /// <summary>
  92. /// 创建 UdpServer 对象
  93. /// </summary>
  94. /// <param name="pListener"></param>
  95. /// <returns></returns>
  96. [DllImport(HPSOCKET_DLL_PATH)]
  97. public static extern IntPtr Create_HP_UdpServer(IntPtr pListener);
  98. /// <summary>
  99. /// 创建 UdpClient 对象
  100. /// </summary>
  101. /// <param name="pListener"></param>
  102. /// <returns></returns>
  103. [DllImport(HPSOCKET_DLL_PATH)]
  104. public static extern IntPtr Create_HP_UdpClient(IntPtr pListener);
  105. /// <summary>
  106. /// 销毁 TcpServer 对象
  107. /// </summary>
  108. /// <param name="pServer"></param>
  109. /// <returns></returns>
  110. [DllImport(HPSOCKET_DLL_PATH)]
  111. public static extern void Destroy_HP_TcpServer(IntPtr pServer);
  112. /// <summary>
  113. /// 销毁 TcpClient 对象
  114. /// </summary>
  115. /// <param name="pClient"></param>
  116. /// <returns></returns>
  117. [DllImport(HPSOCKET_DLL_PATH)]
  118. public static extern void Destroy_HP_TcpClient(IntPtr pClient);
  119. /// <summary>
  120. /// 销毁 TcpAgent 对象
  121. /// </summary>
  122. /// <param name="pAgent"></param>
  123. /// <returns></returns>
  124. [DllImport(HPSOCKET_DLL_PATH)]
  125. public static extern void Destroy_HP_TcpAgent(IntPtr pAgent);
  126. /// <summary>
  127. /// 销毁 TcpPullServer 对象
  128. /// </summary>
  129. /// <param name="pClient"></param>
  130. /// <returns></returns>
  131. [DllImport(HPSOCKET_DLL_PATH)]
  132. public static extern void Destroy_HP_TcpPullServer(IntPtr pServer);
  133. /// <summary>
  134. /// 销毁 TcpPullClient 对象
  135. /// </summary>
  136. /// <param name="pClient"></param>
  137. /// <returns></returns>
  138. [DllImport(HPSOCKET_DLL_PATH)]
  139. public static extern void Destroy_HP_TcpPullClient(IntPtr pClient);
  140. /// <summary>
  141. /// 销毁 TcpPullAgent 对象
  142. /// </summary>
  143. /// <param name="pAgent"></param>
  144. /// <returns></returns>
  145. [DllImport(HPSOCKET_DLL_PATH)]
  146. public static extern void Destroy_HP_TcpPullAgent(IntPtr pAgent);
  147. /// <summary>
  148. /// 销毁 HP_TcpPackServer 对象
  149. /// </summary>
  150. /// <param name="pServer"></param>
  151. [DllImport(HPSOCKET_DLL_PATH)]
  152. public static extern void Destroy_HP_TcpPackServer(IntPtr pServer);
  153. /// <summary>
  154. /// 销毁 HP_TcpPackAgent 对象
  155. /// </summary>
  156. /// <param name="pAgent"></param>
  157. [DllImport(HPSOCKET_DLL_PATH)]
  158. public static extern void Destroy_HP_TcpPackAgent(IntPtr pAgent);
  159. /// <summary>
  160. /// 销毁 HP_TcpPackClient 对象
  161. /// </summary>
  162. /// <param name="pClient"></param>
  163. [DllImport(HPSOCKET_DLL_PATH)]
  164. public static extern void Destroy_HP_TcpPackClient(IntPtr pClient);
  165. /// <summary>
  166. /// 销毁 UdpServer 对象
  167. /// </summary>
  168. /// <param name="pServer"></param>
  169. /// <returns></returns>
  170. [DllImport(HPSOCKET_DLL_PATH)]
  171. public static extern void Destroy_HP_UdpServer(IntPtr pServer);
  172. /// <summary>
  173. /// 销毁 UdpClient 对象
  174. /// </summary>
  175. /// <param name="pClient"></param>
  176. /// <returns></returns>
  177. [DllImport(HPSOCKET_DLL_PATH)]
  178. public static extern void Destroy_HP_UdpClient(IntPtr pClient);
  179. /// <summary>
  180. /// 创建 TcpServerListener 对象
  181. /// </summary>
  182. /// <returns></returns>
  183. [DllImport(HPSOCKET_DLL_PATH)]
  184. public static extern IntPtr Create_HP_TcpServerListener();
  185. /// <summary>
  186. /// 创建 TcpClientListener 对象
  187. /// </summary>
  188. /// <returns></returns>
  189. [DllImport(HPSOCKET_DLL_PATH)]
  190. public static extern IntPtr Create_HP_TcpClientListener();
  191. /// <summary>
  192. /// 创建 TcpAgentListener 对象
  193. /// </summary>
  194. /// <returns></returns>
  195. [DllImport(HPSOCKET_DLL_PATH)]
  196. public static extern IntPtr Create_HP_TcpAgentListener();
  197. /// <summary>
  198. /// 创建 TcpPullServerListener 对象
  199. /// </summary>
  200. /// <returns></returns>
  201. [DllImport(HPSOCKET_DLL_PATH)]
  202. public static extern IntPtr Create_HP_TcpPullServerListener();
  203. /// <summary>
  204. /// 创建 TcpPullClientListener 对象
  205. /// </summary>
  206. /// <returns></returns>
  207. [DllImport(HPSOCKET_DLL_PATH)]
  208. public static extern IntPtr Create_HP_TcpPullClientListener();
  209. /// <summary>
  210. /// 创建 TcpPullAgentListener 对象
  211. /// </summary>
  212. /// <returns></returns>
  213. [DllImport(HPSOCKET_DLL_PATH)]
  214. public static extern IntPtr Create_HP_TcpPullAgentListener();
  215. /// <summary>
  216. /// 创建 UdpServerListener 对象
  217. /// </summary>
  218. /// <returns></returns>
  219. [DllImport(HPSOCKET_DLL_PATH)]
  220. public static extern IntPtr Create_HP_UdpServerListener();
  221. /// <summary>
  222. /// 创建 UdpClientListener 对象
  223. /// </summary>
  224. /// <returns></returns>
  225. [DllImport(HPSOCKET_DLL_PATH)]
  226. public static extern IntPtr Create_HP_UdpClientListener();
  227. /// <summary>
  228. /// 销毁 TcpServerListener 对象
  229. /// </summary>
  230. /// <param name="pListener"></param>
  231. /// <returns></returns>
  232. [DllImport(HPSOCKET_DLL_PATH)]
  233. public static extern void Destroy_HP_TcpServerListener(IntPtr pListener);
  234. /// <summary>
  235. /// 销毁 TcpClientListener 对象
  236. /// </summary>
  237. /// <param name="pListener"></param>
  238. /// <returns></returns>
  239. [DllImport(HPSOCKET_DLL_PATH)]
  240. public static extern void Destroy_HP_TcpClientListener(IntPtr pListener);
  241. /// <summary>
  242. /// 销毁 TcpAgentListener 对象
  243. /// </summary>
  244. /// <param name="pListener"></param>
  245. /// <returns></returns>
  246. [DllImport(HPSOCKET_DLL_PATH)]
  247. public static extern void Destroy_HP_TcpAgentListener(IntPtr pListener);
  248. /// <summary>
  249. /// 销毁 TcpPullServerListener 对象
  250. /// </summary>
  251. /// <param name="pListener"></param>
  252. /// <returns></returns>
  253. [DllImport(HPSOCKET_DLL_PATH)]
  254. public static extern void Destroy_HP_TcpPullServerListener(IntPtr pListener);
  255. /// <summary>
  256. /// 销毁 TcpPullClientListener 对象
  257. /// </summary>
  258. /// <param name="pListener"></param>
  259. /// <returns></returns>
  260. [DllImport(HPSOCKET_DLL_PATH)]
  261. public static extern void Destroy_HP_TcpPullClientListener(IntPtr pListener);
  262. /// <summary>
  263. /// 销毁 TcpPullAgentListener 对象
  264. /// </summary>
  265. /// <param name="pListener"></param>
  266. /// <returns></returns>
  267. [DllImport(HPSOCKET_DLL_PATH)]
  268. public static extern void Destroy_HP_TcpPullAgentListener(IntPtr pListener);
  269. /// <summary>
  270. /// 销毁 UdpServerListener 对象
  271. /// </summary>
  272. /// <param name="pListener"></param>
  273. /// <returns></returns>
  274. [DllImport(HPSOCKET_DLL_PATH)]
  275. public static extern void Destroy_HP_UdpServerListener(IntPtr pListener);
  276. /// <summary>
  277. /// 销毁 UdpClientListener 对象
  278. /// </summary>
  279. /// <param name="pListener"></param>
  280. /// <returns></returns>
  281. [DllImport(HPSOCKET_DLL_PATH)]
  282. public static extern void Destroy_HP_UdpClientListener(IntPtr pListener);
  283. /**********************************************************************************/
  284. /***************************** Server 回调函数设置方法 *****************************/
  285. [DllImport(HPSOCKET_DLL_PATH)]
  286. public static extern void HP_Set_FN_Server_OnPrepareListen(IntPtr pListener, Sdk.OnPrepareListen fn);
  287. [DllImport(HPSOCKET_DLL_PATH)]
  288. public static extern void HP_Set_FN_Server_OnAccept(IntPtr pListener, Sdk.OnAccept fn);
  289. [DllImport(HPSOCKET_DLL_PATH)]
  290. public static extern void HP_Set_FN_Server_OnHandShake(IntPtr pListener, Sdk.OnHandShake fn);
  291. [DllImport(HPSOCKET_DLL_PATH)]
  292. public static extern void HP_Set_FN_Server_OnSend(IntPtr pListener, Sdk.OnSend fn);
  293. [DllImport(HPSOCKET_DLL_PATH)]
  294. public static extern void HP_Set_FN_Server_OnReceive(IntPtr pListener, Sdk.OnReceive fn);
  295. [DllImport(HPSOCKET_DLL_PATH)]
  296. public static extern void HP_Set_FN_Server_OnPullReceive(IntPtr pListener, Sdk.OnPullReceive fn);
  297. [DllImport(HPSOCKET_DLL_PATH)]
  298. public static extern void HP_Set_FN_Server_OnClose(IntPtr pListener, Sdk.OnClose fn);
  299. [DllImport(HPSOCKET_DLL_PATH)]
  300. public static extern void HP_Set_FN_Server_OnShutdown(IntPtr pListener, Sdk.OnShutdown fn);
  301. /**********************************************************************************/
  302. /***************************** Client 回调函数设置方法 *****************************/
  303. [DllImport(HPSOCKET_DLL_PATH)]
  304. public static extern void HP_Set_FN_Client_OnPrepareConnect(IntPtr pListener, Sdk.OnPrepareConnect fn);
  305. [DllImport(HPSOCKET_DLL_PATH)]
  306. public static extern void HP_Set_FN_Client_OnConnect(IntPtr pListener, Sdk.OnConnect fn);
  307. [DllImport(HPSOCKET_DLL_PATH)]
  308. public static extern void HP_Set_FN_Client_OnHandShake(IntPtr pListener, Sdk.OnHandShake fn);
  309. [DllImport(HPSOCKET_DLL_PATH)]
  310. public static extern void HP_Set_FN_Client_OnSend(IntPtr pListener, Sdk.OnSend fn);
  311. [DllImport(HPSOCKET_DLL_PATH)]
  312. public static extern void HP_Set_FN_Client_OnReceive(IntPtr pListener, Sdk.OnReceive fn);
  313. [DllImport(HPSOCKET_DLL_PATH)]
  314. public static extern void HP_Set_FN_Client_OnPullReceive(IntPtr pListener, Sdk.OnPullReceive fn);
  315. [DllImport(HPSOCKET_DLL_PATH)]
  316. public static extern void HP_Set_FN_Client_OnClose(IntPtr pListener, Sdk.OnClose fn);
  317. /**********************************************************************************/
  318. /****************************** Agent 回调函数设置方法 *****************************/
  319. [DllImport(HPSOCKET_DLL_PATH)]
  320. public static extern void HP_Set_FN_Agent_OnPrepareConnect(IntPtr pListener, Sdk.OnPrepareConnect fn);
  321. [DllImport(HPSOCKET_DLL_PATH)]
  322. public static extern void HP_Set_FN_Agent_OnConnect(IntPtr pListener, Sdk.OnConnect fn);
  323. [DllImport(HPSOCKET_DLL_PATH)]
  324. public static extern void HP_Set_FN_Agent_OnHandShake(IntPtr pListener, Sdk.OnHandShake fn);
  325. [DllImport(HPSOCKET_DLL_PATH)]
  326. public static extern void HP_Set_FN_Agent_OnSend(IntPtr pListener, Sdk.OnSend fn);
  327. [DllImport(HPSOCKET_DLL_PATH)]
  328. public static extern void HP_Set_FN_Agent_OnReceive(IntPtr pListener, Sdk.OnReceive fn);
  329. [DllImport(HPSOCKET_DLL_PATH)]
  330. public static extern void HP_Set_FN_Agent_OnPullReceive(IntPtr pListener, Sdk.OnPullReceive fn);
  331. [DllImport(HPSOCKET_DLL_PATH)]
  332. public static extern void HP_Set_FN_Agent_OnClose(IntPtr pListener, Sdk.OnClose fn);
  333. [DllImport(HPSOCKET_DLL_PATH)]
  334. public static extern void HP_Set_FN_Agent_OnShutdown(IntPtr pListener, Sdk.OnShutdown fn);
  335. /**************************************************************************/
  336. /***************************** Server 操作方法 *****************************/
  337. /// <summary>
  338. /// 名称:启动通信组件
  339. /// 描述:启动服务端通信组件,启动完成后可开始接收客户端连接并收发数据
  340. /// </summary>
  341. /// <param name="pServer"></param>
  342. /// <param name="pszBindAddress">监听地址</param>
  343. /// <param name="usPort">监听端口</param>
  344. /// <returns>失败,可通过 GetLastError() 获取错误代码</returns>
  345. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
  346. public static extern bool HP_Server_Start(IntPtr pServer, string pszBindAddress, ushort usPort);
  347. /// <summary>
  348. /// 关闭服务端通信组件,关闭完成后断开所有客户端连接并释放所有资源
  349. /// </summary>
  350. /// <param name="pServer"></param>
  351. /// <returns>失败,可通过 GetLastError() 获取错误代码</returns>
  352. [DllImport(HPSOCKET_DLL_PATH)]
  353. public static extern bool HP_Server_Stop(IntPtr pServer);
  354. /// <summary>
  355. /// 用户通过该方法向指定客户端发送数据
  356. /// </summary>
  357. /// <param name="pServer"></param>
  358. /// <param name="connId">连接 ID</param>
  359. /// <param name="pBuffer">发送数据长度</param>
  360. /// <param name="length">发送数据长度</param>
  361. /// <returns></returns>
  362. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
  363. public static extern bool HP_Server_Send(IntPtr pServer, IntPtr connId, byte[] pBuffer, int length);
  364. /// <summary>
  365. /// 用户通过该方法向指定客户端发送数据
  366. /// </summary>
  367. /// <param name="pServer"></param>
  368. /// <param name="connId">连接 ID</param>
  369. /// <param name="pBuffer">发送数据长度</param>
  370. /// <param name="length">发送数据长度</param>
  371. /// <returns></returns>
  372. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  373. public static extern bool HP_Server_Send(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length);
  374. /// <summary>
  375. /// 用户通过该方法向指定客户端发送数据
  376. /// </summary>
  377. /// <param name="pServer"></param>
  378. /// <param name="connId"></param>
  379. /// <param name="pBuffer"></param>
  380. /// <param name="length"></param>
  381. /// <param name="iOffset">针对pBuffer的偏移</param>
  382. /// <returns></returns>
  383. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
  384. public static extern bool HP_Server_SendPart(IntPtr pServer, IntPtr connId, byte[] pBuffer, int length, int iOffset);
  385. /// <summary>
  386. /// 用户通过该方法向指定客户端发送数据
  387. /// </summary>
  388. /// <param name="pServer"></param>
  389. /// <param name="connId"></param>
  390. /// <param name="pBuffer"></param>
  391. /// <param name="length"></param>
  392. /// <param name="iOffset">针对pBuffer的偏移</param>
  393. /// <returns></returns>
  394. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  395. public static extern bool HP_Server_SendPart(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length, int iOffset);
  396. /// <summary>
  397. /// 发送多组数据
  398. /// 向指定连接发送多组数据
  399. /// TCP - 顺序发送所有数据包
  400. /// UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
  401. /// </summary>
  402. /// <param name="pServer"></param>
  403. /// <param name="connId">连接 ID</param>
  404. /// <param name="pBuffers">发送缓冲区数组</param>
  405. /// <param name="iCount">发送缓冲区数目</param>
  406. /// <returns>TRUE.成功,FALSE.失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
  407. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  408. public static extern bool HP_Server_SendPackets(IntPtr pServer, IntPtr connId, WSABUF[] pBuffers, int iCount);
  409. /// <summary>
  410. /// 断开与某个客户端的连接
  411. /// </summary>
  412. /// <param name="pServer"></param>
  413. /// <param name="connId">连接 ID</param>
  414. /// <param name="bForce">是否强制断开连接</param>
  415. /// <returns></returns>
  416. [DllImport(HPSOCKET_DLL_PATH)]
  417. public static extern bool HP_Server_Disconnect(IntPtr pServer, IntPtr connId, bool bForce);
  418. /// <summary>
  419. /// 断开超过指定时长的连接
  420. /// </summary>
  421. /// <param name="pServer"></param>
  422. /// <param name="dwPeriod">时长(毫秒)</param>
  423. /// <param name="bForce">是否强制断开连接</param>
  424. /// <returns></returns>
  425. [DllImport(HPSOCKET_DLL_PATH)]
  426. public static extern bool HP_Server_DisconnectLongConnections(IntPtr pServer, uint dwPeriod, bool bForce);
  427. /// <summary>
  428. /// 断开超过指定时长的静默连接
  429. /// </summary>
  430. /// <param name="pServer"></param>
  431. /// <param name="dwPeriod">时长(毫秒)</param>
  432. /// <param name="bForce">是否强制断开连接</param>
  433. /// <returns></returns>
  434. [DllImport(HPSOCKET_DLL_PATH)]
  435. public static extern bool HP_Server_DisconnectSilenceConnections(IntPtr pServer, uint dwPeriod, bool bForce);
  436. /******************************************************************************/
  437. /***************************** Server 属性访问方法 *****************************/
  438. /// <summary>
  439. /// 设置数据发送策略
  440. /// </summary>
  441. /// <param name="pServer"></param>
  442. /// <param name="enSendPolicy"></param>
  443. [DllImport(HPSOCKET_DLL_PATH)]
  444. public static extern void HP_Server_SetSendPolicy(IntPtr pServer, SendPolicy enSendPolicy);
  445. /// <summary>
  446. /// 获取数据发送策略
  447. /// </summary>
  448. /// <param name="pServer"></param>
  449. /// <returns></returns>
  450. [DllImport(HPSOCKET_DLL_PATH)]
  451. public static extern SendPolicy HP_Server_GetSendPolicy(IntPtr pServer);
  452. /// <summary>
  453. /// 设置连接的附加数据
  454. /// 是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  455. /// </summary>
  456. /// <param name="pServer"></param>
  457. /// <param name="connId">连接 ID</param>
  458. /// <param name="pExtra"></param>
  459. /// <returns>若返回 false 失败则为(无效的连接 ID)</returns>
  460. [DllImport(HPSOCKET_DLL_PATH)]
  461. public static extern bool HP_Server_SetConnectionExtra(IntPtr pServer, IntPtr connId, IntPtr pExtra);
  462. /// <summary>
  463. /// 获取连接的附加数据
  464. /// 是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  465. /// </summary>
  466. /// <param name="pServer"></param>
  467. /// <param name="connId">连接 ID</param>
  468. /// <param name="pExtra">数据指针</param>
  469. /// <returns>若返回 false 失败则为(无效的连接 ID)</returns>
  470. [DllImport(HPSOCKET_DLL_PATH)]
  471. public static extern bool HP_Server_GetConnectionExtra(IntPtr pServer, IntPtr connId, ref IntPtr pExtra);
  472. /// <summary>
  473. /// 检查通信组件是否已启动
  474. /// </summary>
  475. /// <param name="pServer"></param>
  476. /// <returns></returns>
  477. [DllImport(HPSOCKET_DLL_PATH)]
  478. public static extern bool HP_Server_HasStarted(IntPtr pServer);
  479. /// <summary>
  480. /// 查看通信组件当前状态
  481. /// </summary>
  482. /// <param name="pServer"></param>
  483. /// <returns></returns>
  484. [DllImport(HPSOCKET_DLL_PATH)]
  485. public static extern ServiceState HP_Server_GetState(IntPtr pServer);
  486. /// <summary>
  487. /// 获取最近一次失败操作的错误代码
  488. /// </summary>
  489. /// <param name="pServer"></param>
  490. /// <returns></returns>
  491. [DllImport(HPSOCKET_DLL_PATH)]
  492. public static extern SocketError HP_Server_GetLastError(IntPtr pServer);
  493. /// <summary>
  494. /// 获取最近一次失败操作的错误描述
  495. /// </summary>
  496. /// <param name="pServer"></param>
  497. /// <returns></returns>
  498. [DllImport(HPSOCKET_DLL_PATH)]
  499. public static extern IntPtr HP_Server_GetLastErrorDesc(IntPtr pServer);
  500. /// <summary>
  501. /// 获取连接中未发出数据的长度
  502. /// </summary>
  503. /// <param name="pServer"></param>
  504. /// <param name="connId"></param>
  505. /// <param name="piPending"></param>
  506. /// <returns></returns>
  507. [DllImport(HPSOCKET_DLL_PATH)]
  508. public static extern bool HP_Server_GetPendingDataLength(IntPtr pServer, IntPtr connId, ref int piPending);
  509. /// <summary>
  510. /// 获取客户端连接数
  511. /// </summary>
  512. /// <param name="pServer"></param>
  513. /// <returns></returns>
  514. [DllImport(HPSOCKET_DLL_PATH)]
  515. public static extern uint HP_Server_GetConnectionCount(IntPtr pServer);
  516. /// <summary>
  517. /// 获取所有连接的 CONNID
  518. /// </summary>
  519. /// <param name="pServer"></param>
  520. /// <param name="pIDs"></param>
  521. /// <param name="pdwCount"></param>
  522. /// <returns></returns>
  523. [DllImport(HPSOCKET_DLL_PATH)]
  524. public static extern bool HP_Server_GetAllConnectionIDs(IntPtr pServer, IntPtr[] pIDs, ref uint pdwCount);
  525. /// <summary>
  526. /// 获取某个客户端连接时长(毫秒)
  527. /// </summary>
  528. /// <param name="pServer"></param>
  529. /// <param name="connId"></param>
  530. /// <param name="pdwPeriod"></param>
  531. /// <returns></returns>
  532. [DllImport(HPSOCKET_DLL_PATH)]
  533. public static extern bool HP_Server_GetConnectPeriod(IntPtr pServer, IntPtr connId, ref uint pdwPeriod);
  534. /// <summary>
  535. /// 获取某个连接静默时间(毫秒)
  536. /// </summary>
  537. /// <param name="pServer"></param>
  538. /// <param name="connId"></param>
  539. /// <param name="pdwPeriod"></param>
  540. /// <returns></returns>
  541. [DllImport(HPSOCKET_DLL_PATH)]
  542. public static extern bool HP_Server_GetSilencePeriod(IntPtr pServer, IntPtr connId, ref uint pdwPeriod);
  543. /// <summary>
  544. /// 获取监听 Socket 的地址信息
  545. /// </summary>
  546. /// <param name="pServer"></param>
  547. /// <param name="lpszAddress"></param>
  548. /// <param name="piAddressLen"></param>
  549. /// <param name="pusPort"></param>
  550. /// <returns></returns>
  551. [DllImport(HPSOCKET_DLL_PATH)]
  552. public static extern bool HP_Server_GetListenAddress(IntPtr pServer, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
  553. /// <summary>
  554. /// 获取某个客户端连接的地址信息
  555. /// </summary>
  556. /// <param name="pServer"></param>
  557. /// <param name="connId"></param>
  558. /// <param name="lpszAddress"></param>
  559. /// <param name="piAddressLen">传入传出值,大小最好在222.222.222.222的长度以上</param>
  560. /// <param name="pusPort"></param>
  561. /// <returns></returns>
  562. [DllImport(HPSOCKET_DLL_PATH)]
  563. public static extern bool HP_Server_GetRemoteAddress(IntPtr pServer, IntPtr connId, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
  564. /// <summary>
  565. /// 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用)
  566. /// </summary>
  567. /// <param name="pServer"></param>
  568. /// <param name="dwFreeSocketObjLockTime"></param>
  569. [DllImport(HPSOCKET_DLL_PATH)]
  570. public static extern void HP_Server_SetFreeSocketObjLockTime(IntPtr pServer, uint dwFreeSocketObjLockTime);
  571. /// <summary>
  572. /// 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2)
  573. /// </summary>
  574. /// <param name="pServer"></param>
  575. /// <param name="dwFreeSocketObjPool"></param>
  576. [DllImport(HPSOCKET_DLL_PATH)]
  577. public static extern void HP_Server_SetFreeSocketObjPool(IntPtr pServer, uint dwFreeSocketObjPool);
  578. /// <summary>
  579. /// 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍)
  580. /// </summary>
  581. /// <param name="pServer"></param>
  582. /// <param name="dwFreeBufferObjPool"></param>
  583. [DllImport(HPSOCKET_DLL_PATH)]
  584. public static extern void HP_Server_SetFreeBufferObjPool(IntPtr pServer, uint dwFreeBufferObjPool);
  585. /// <summary>
  586. /// 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍)
  587. /// </summary>
  588. /// <param name="pServer"></param>
  589. /// <param name="dwFreeSocketObjHold"></param>
  590. [DllImport(HPSOCKET_DLL_PATH)]
  591. public static extern void HP_Server_SetFreeSocketObjHold(IntPtr pServer, uint dwFreeSocketObjHold);
  592. /// <summary>
  593. /// 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍)
  594. /// </summary>
  595. /// <param name="pServer"></param>
  596. /// <param name="dwFreeBufferObjHold"></param>
  597. [DllImport(HPSOCKET_DLL_PATH)]
  598. public static extern void HP_Server_SetFreeBufferObjHold(IntPtr pServer, uint dwFreeBufferObjHold);
  599. /// <summary>
  600. /// 设置工作线程数量(通常设置为 2 * CPU + 2)
  601. /// </summary>
  602. /// <param name="pServer"></param>
  603. /// <param name="dwWorkerThreadCount"></param>
  604. [DllImport(HPSOCKET_DLL_PATH)]
  605. public static extern void HP_Server_SetWorkerThreadCount(IntPtr pServer, uint dwWorkerThreadCount);
  606. /// <summary>
  607. /// 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE)
  608. /// </summary>
  609. /// <param name="pServer"></param>
  610. /// <param name="bMarkSilence"></param>
  611. [DllImport(HPSOCKET_DLL_PATH)]
  612. public static extern void HP_Server_SetMarkSilence(IntPtr pServer, bool bMarkSilence);
  613. /// <summary>
  614. /// 获取 Socket 缓存对象锁定时间
  615. /// </summary>
  616. /// <param name="pServer"></param>
  617. /// <returns></returns>
  618. [DllImport(HPSOCKET_DLL_PATH)]
  619. public static extern uint HP_Server_GetFreeSocketObjLockTime(IntPtr pServer);
  620. /// <summary>
  621. /// 获取 Socket 缓存池大小
  622. /// </summary>
  623. /// <param name="pServer"></param>
  624. /// <returns></returns>
  625. [DllImport(HPSOCKET_DLL_PATH)]
  626. public static extern uint HP_Server_GetFreeSocketObjPool(IntPtr pServer);
  627. /// <summary>
  628. /// 获取内存块缓存池大小
  629. /// </summary>
  630. /// <param name="pServer"></param>
  631. /// <returns></returns>
  632. [DllImport(HPSOCKET_DLL_PATH)]
  633. public static extern uint HP_Server_GetFreeBufferObjPool(IntPtr pServer);
  634. /// <summary>
  635. /// 获取 Socket 缓存池回收阀值
  636. /// </summary>
  637. /// <param name="pServer"></param>
  638. /// <returns></returns>
  639. [DllImport(HPSOCKET_DLL_PATH)]
  640. public static extern uint HP_Server_GetFreeSocketObjHold(IntPtr pServer);
  641. /// <summary>
  642. /// 获取内存块缓存池回收阀值
  643. /// </summary>
  644. /// <param name="pServer"></param>
  645. /// <returns></returns>
  646. [DllImport(HPSOCKET_DLL_PATH)]
  647. public static extern uint HP_Server_GetFreeBufferObjHold(IntPtr pServer);
  648. /// <summary>
  649. /// 获取工作线程数量
  650. /// </summary>
  651. /// <param name="pServer"></param>
  652. /// <returns></returns>
  653. [DllImport(HPSOCKET_DLL_PATH)]
  654. public static extern uint HP_Server_GetWorkerThreadCount(IntPtr pServer);
  655. /// <summary>
  656. /// 检测是否标记静默时间
  657. /// </summary>
  658. /// <param name="pServer"></param>
  659. /// <returns></returns>
  660. [DllImport(HPSOCKET_DLL_PATH)]
  661. public static extern bool HP_Server_IsMarkSilence(IntPtr pServer);
  662. /**********************************************************************************/
  663. /***************************** TCP Server 操作方法 *****************************/
  664. /// <summary>
  665. /// 名称:发送小文件
  666. /// 描述:向指定连接发送 4096 KB 以下的小文件
  667. /// </summary>
  668. /// <param name="pServer"></param>
  669. /// <param name="connId">连接 ID</param>
  670. /// <param name="lpszFileName">文件路径</param>
  671. /// <param name="pHead">头部附加数据</param>
  672. /// <param name="pTail">尾部附加数据</param>
  673. /// <returns>TRUE.成功 FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
  674. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
  675. public static extern bool HP_TcpServer_SendSmallFile(IntPtr pServer, IntPtr connId, string lpszFileName, ref WSABUF pHead, ref WSABUF pTail);
  676. /**********************************************************************************/
  677. /***************************** TCP Server 属性访问方法 *****************************/
  678. /// <summary>
  679. /// 设置 Accept 预投递数量(根据负载调整设置,Accept 预投递数量越大则支持的并发连接请求越多)
  680. /// </summary>
  681. /// <param name="pServer"></param>
  682. /// <param name="dwAcceptSocketCount"></param>
  683. [DllImport(HPSOCKET_DLL_PATH)]
  684. public static extern void HP_TcpServer_SetAcceptSocketCount(IntPtr pServer, uint dwAcceptSocketCount);
  685. /// <summary>
  686. /// 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数)
  687. /// </summary>
  688. /// <param name="pServer"></param>
  689. /// <param name="dwSocketBufferSize"></param>
  690. [DllImport(HPSOCKET_DLL_PATH)]
  691. public static extern void HP_TcpServer_SetSocketBufferSize(IntPtr pServer, uint dwSocketBufferSize);
  692. /// <summary>
  693. /// 设置监听 Socket 的等候队列大小(根据并发连接数量调整设置)
  694. /// </summary>
  695. /// <param name="pServer"></param>
  696. /// <param name="dwSocketListenQueue"></param>
  697. [DllImport(HPSOCKET_DLL_PATH)]
  698. public static extern void HP_TcpServer_SetSocketListenQueue(IntPtr pServer, uint dwSocketListenQueue);
  699. /// <summary>
  700. /// 设置心跳包间隔(毫秒,0 则不发送心跳包)
  701. /// </summary>
  702. /// <param name="pServer"></param>
  703. /// <param name="dwKeepAliveTime"></param>
  704. [DllImport(HPSOCKET_DLL_PATH)]
  705. public static extern void HP_TcpServer_SetKeepAliveTime(IntPtr pServer, uint dwKeepAliveTime);
  706. /// <summary>
  707. /// 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线)
  708. /// </summary>
  709. /// <param name="pServer"></param>
  710. /// <param name="dwKeepAliveInterval"></param>
  711. [DllImport(HPSOCKET_DLL_PATH)]
  712. public static extern void HP_TcpServer_SetKeepAliveInterval(IntPtr pServer, uint dwKeepAliveInterval);
  713. /// <summary>
  714. /// 获取 Accept 预投递数量
  715. /// </summary>
  716. /// <param name="pServer"></param>
  717. /// <returns></returns>
  718. [DllImport(HPSOCKET_DLL_PATH)]
  719. public static extern uint HP_TcpServer_GetAcceptSocketCount(IntPtr pServer);
  720. /// <summary>
  721. /// 获取通信数据缓冲区大小
  722. /// </summary>
  723. /// <param name="pServer"></param>
  724. /// <returns></returns>
  725. [DllImport(HPSOCKET_DLL_PATH)]
  726. public static extern uint HP_TcpServer_GetSocketBufferSize(IntPtr pServer);
  727. /// <summary>
  728. /// 获取监听 Socket 的等候队列大小
  729. /// </summary>
  730. /// <param name="pServer"></param>
  731. /// <returns></returns>
  732. [DllImport(HPSOCKET_DLL_PATH)]
  733. public static extern uint HP_TcpServer_GetSocketListenQueue(IntPtr pServer);
  734. /// <summary>
  735. /// 获取心跳检查次数
  736. /// </summary>
  737. /// <param name="pServer"></param>
  738. /// <returns></returns>
  739. [DllImport(HPSOCKET_DLL_PATH)]
  740. public static extern uint HP_TcpServer_GetKeepAliveTime(IntPtr pServer);
  741. /// <summary>
  742. /// 获取心跳检查间隔
  743. /// </summary>
  744. /// <param name="pServer"></param>
  745. /// <returns></returns>
  746. [DllImport(HPSOCKET_DLL_PATH)]
  747. public static extern uint HP_TcpServer_GetKeepAliveInterval(IntPtr pServer);
  748. /**********************************************************************************/
  749. /***************************** UDP Server 属性访问方法 *****************************/
  750. /// <summary>
  751. /// 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节)
  752. /// </summary>
  753. /// <param name="pServer"></param>
  754. /// <param name="dwMaxDatagramSize"></param>
  755. [DllImport(HPSOCKET_DLL_PATH)]
  756. public static extern void HP_UdpServer_SetMaxDatagramSize(IntPtr pServer, uint dwMaxDatagramSize);
  757. /// <summary>
  758. /// 获取数据报文最大长度
  759. /// </summary>
  760. /// <param name="pServer"></param>
  761. /// <returns></returns>
  762. [DllImport(HPSOCKET_DLL_PATH)]
  763. public static extern uint HP_UdpServer_GetMaxDatagramSize(IntPtr pServer);
  764. /// <summary>
  765. /// 设置 Receive 预投递数量(根据负载调整设置,Receive 预投递数量越大则丢包概率越小)
  766. /// </summary>
  767. /// <param name="pServer"></param>
  768. /// <param name="dwPostReceiveCount"></param>
  769. [DllImport(HPSOCKET_DLL_PATH)]
  770. public static extern void HP_UdpServer_SetPostReceiveCount(IntPtr pServer, uint dwPostReceiveCount);
  771. /// <summary>
  772. /// 获取 Receive 预投递数量
  773. /// </summary>
  774. /// <param name="pServer"></param>
  775. /// <returns></returns>
  776. [DllImport(HPSOCKET_DLL_PATH)]
  777. public static extern uint HP_UdpServer_GetPostReceiveCount(IntPtr pServer);
  778. /// <summary>
  779. /// 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线)
  780. /// </summary>
  781. /// <param name="pServer"></param>
  782. /// <param name="dwMaxDatagramSize"></param>
  783. [DllImport(HPSOCKET_DLL_PATH)]
  784. public static extern void HP_UdpServer_SetDetectAttempts(IntPtr pServer, uint dwMaxDatagramSize);
  785. /// <summary>
  786. /// 设置监测包发送间隔(秒,0 不发送监测包)
  787. /// </summary>
  788. /// <param name="pServer"></param>
  789. /// <param name="dwMaxDatagramSize"></param>
  790. [DllImport(HPSOCKET_DLL_PATH)]
  791. public static extern void HP_UdpServer_SetDetectInterval(IntPtr pServer, uint dwMaxDatagramSize);
  792. /// <summary>
  793. /// 获取心跳检查次数
  794. /// </summary>
  795. /// <param name="pServer"></param>
  796. /// <returns></returns>
  797. [DllImport(HPSOCKET_DLL_PATH)]
  798. public static extern uint HP_UdpServer_GetDetectAttempts(IntPtr pServer);
  799. /// <summary>
  800. /// 获取心跳检查间隔
  801. /// </summary>
  802. /// <param name="pServer"></param>
  803. /// <returns></returns>
  804. [DllImport(HPSOCKET_DLL_PATH)]
  805. public static extern uint HP_UdpServer_GetDetectInterval(IntPtr pServer);
  806. /******************************************************************************/
  807. /***************************** Client 组件操作方法 *****************************/
  808. /// <summary>
  809. /// 启动客户端通信组件并连接服务端,启动完成后可开始收发数据
  810. /// </summary>
  811. /// <param name="pClient"></param>
  812. /// <param name="pszRemoteAddress">服务端地址</param>
  813. /// <param name="usPort">服务端端口</param>
  814. /// <param name="bAsyncConnect">是否采用异步 Connnect</param>
  815. /// <returns>失败,可通过 HP_Client_GetLastError() 获取错误代码</returns>
  816. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
  817. public static extern bool HP_Client_Start(IntPtr pClient, string pszRemoteAddress, ushort usPort, bool bAsyncConnect);
  818. /// <summary>
  819. /// 启动通信组件(并指定绑定地址), 启动客户端通信组件并连接服务端,启动完成后可开始收发数据
  820. /// </summary>
  821. /// <param name="pClient"></param>
  822. /// <param name="lpszRemoteAddress">服务端地址</param>
  823. /// <param name="usPort">服务端端口</param>
  824. /// <param name="bAsyncConnect">是否采用异步 Connect</param>
  825. /// <param name="lpszBindAddress">绑定地址(默认:nullptr,TcpClient/UdpClient -> 不执行绑定操作,UdpCast 绑定 -> 0.0.0.0)</param>
  826. /// <returns>失败,可通过 HP_Client_GetLastError() 获取错误代码</returns>
  827. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
  828. public static extern bool HP_Client_StartWithBindAddress(IntPtr pClient, string lpszRemoteAddress, ushort usPort, bool bAsyncConnect, string lpszBindAddress);
  829. /// <summary>
  830. /// 关闭客户端通信组件,关闭完成后断开与服务端的连接并释放所有资源
  831. /// </summary>
  832. /// <param name="pClient"></param>
  833. /// <returns>失败,可通过 HP_Client_GetLastError() 获取错误代码</returns>
  834. [DllImport(HPSOCKET_DLL_PATH)]
  835. public static extern bool HP_Client_Stop(IntPtr pClient);
  836. /// <summary>
  837. /// 用户通过该方法向服务端发送数据
  838. /// </summary>
  839. /// <param name="pClient"></param>
  840. /// <param name="connId">连接 ID(保留参数,目前该参数并未使用)</param>
  841. /// <param name="pBuffer">发送数据缓冲区</param>
  842. /// <param name="length">发送数据长度</param>
  843. /// <returns>失败,可通过 HP_Client_GetLastError() 获取错误代码</returns>
  844. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
  845. public static extern bool HP_Client_Send(IntPtr pClient, byte[] pBuffer, int length);
  846. /// <summary>
  847. /// 用户通过该方法向服务端发送数据
  848. /// </summary>
  849. /// <param name="pClient"></param>
  850. /// <param name="connId">连接 ID(保留参数,目前该参数并未使用)</param>
  851. /// <param name="pBuffer">发送数据缓冲区</param>
  852. /// <param name="length">发送数据长度</param>
  853. /// <returns>失败,可通过 HP_Client_GetLastError() 获取错误代码</returns>
  854. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  855. public static extern bool HP_Client_Send(IntPtr pClient, IntPtr pBuffer, int length);
  856. /// <summary>
  857. /// 用户通过该方法向服务端发送数据
  858. /// </summary>
  859. /// <param name="pClient"></param>
  860. /// <param name="pBuffer"></param>
  861. /// <param name="length"></param>
  862. /// <param name="iOffset">针对pBuffer的偏移</param>
  863. /// <returns></returns>
  864. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
  865. public static extern bool HP_Client_SendPart(IntPtr pClient, byte[] pBuffer, int length, int iOffset);
  866. /// <summary>
  867. /// 用户通过该方法向服务端发送数据
  868. /// </summary>
  869. /// <param name="pClient"></param>
  870. /// <param name="pBuffer"></param>
  871. /// <param name="length"></param>
  872. /// <param name="iOffset">针对pBuffer的偏移</param>
  873. /// <returns></returns>
  874. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  875. public static extern bool HP_Client_SendPart(IntPtr pClient, IntPtr pBuffer, int length, int iOffset);
  876. /// <summary>
  877. /// 发送多组数据
  878. /// 向服务端发送多组数据
  879. /// TCP - 顺序发送所有数据包
  880. /// UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
  881. /// </summary>
  882. /// <param name="pClient"></param>
  883. /// <param name="pBuffers">发送缓冲区数组</param>
  884. /// <param name="iCount">发送缓冲区数目</param>
  885. /// <returns>TRUE.成功,FALSE.失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
  886. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  887. public static extern bool HP_Client_SendPackets(IntPtr pClient, WSABUF[] pBuffers, int iCount);
  888. /******************************************************************************/
  889. /***************************** Client 属性访问方法 *****************************/
  890. /// <summary>
  891. /// 设置连接的附加数据
  892. /// </summary>
  893. /// <param name="pClient"></param>
  894. /// <param name="pExtra"></param>
  895. [DllImport(HPSOCKET_DLL_PATH)]
  896. public static extern void HP_Client_SetExtra(IntPtr pClient, IntPtr pExtra);
  897. /// <summary>
  898. /// 获取连接的附加数据
  899. /// </summary>
  900. /// <param name="pClient"></param>
  901. /// <returns></returns>
  902. [DllImport(HPSOCKET_DLL_PATH)]
  903. public static extern IntPtr HP_Client_GetExtra(IntPtr pClient);
  904. /// <summary>
  905. /// 检查通信组件是否已启动
  906. /// </summary>
  907. /// <param name="pClient"></param>
  908. /// <returns></returns>
  909. [DllImport(HPSOCKET_DLL_PATH)]
  910. public static extern bool HP_Client_HasStarted(IntPtr pClient);
  911. /// <summary>
  912. /// 查看通信组件当前状态
  913. /// </summary>
  914. /// <param name="pClient"></param>
  915. /// <returns></returns>
  916. [DllImport(HPSOCKET_DLL_PATH)]
  917. public static extern ServiceState HP_Client_GetState(IntPtr pClient);
  918. /// <summary>
  919. /// 获取最近一次失败操作的错误代码
  920. /// </summary>
  921. /// <param name="pClient"></param>
  922. /// <returns></returns>
  923. [DllImport(HPSOCKET_DLL_PATH)]
  924. public static extern SocketError HP_Client_GetLastError(IntPtr pClient);
  925. /// <summary>
  926. /// 获取最近一次失败操作的错误描述
  927. /// </summary>
  928. /// <param name="pClient"></param>
  929. /// <returns></returns>
  930. [DllImport(HPSOCKET_DLL_PATH)]
  931. public static extern IntPtr HP_Client_GetLastErrorDesc(IntPtr pClient);
  932. /// <summary>
  933. /// 获取该组件对象的连接 ID
  934. /// </summary>
  935. /// <param name="pClient"></param>
  936. /// <returns></returns>
  937. [DllImport(HPSOCKET_DLL_PATH)]
  938. public static extern IntPtr HP_Client_GetConnectionID(IntPtr pClient);
  939. /// <summary>
  940. /// 获取 Client Socket 的地址信息
  941. /// </summary>
  942. /// <param name="pClient"></param>
  943. /// <param name="lpszAddress"></param>
  944. /// <param name="piAddressLen"></param>
  945. /// <param name="pusPort"></param>
  946. /// <returns></returns>
  947. [DllImport(HPSOCKET_DLL_PATH)]
  948. public static extern bool HP_Client_GetLocalAddress(IntPtr pClient, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
  949. /// <summary>
  950. /// 获取连接中未发出数据的长度
  951. /// </summary>
  952. /// <param name="pClient"></param>
  953. /// <param name="piPending"></param>
  954. /// <returns></returns>
  955. [DllImport(HPSOCKET_DLL_PATH)]
  956. public static extern bool HP_Client_GetPendingDataLength(IntPtr pClient, ref int piPending);
  957. /// <summary>
  958. /// 设置内存块缓存池大小(通常设置为 -> PUSH 模型:5 - 10;PULL 模型:10 - 20 )
  959. /// </summary>
  960. /// <param name="pClient"></param>
  961. /// <param name="dwFreeBufferPoolSize"></param>
  962. [DllImport(HPSOCKET_DLL_PATH)]
  963. public static extern void HP_Client_SetFreeBufferPoolSize(IntPtr pClient, uint dwFreeBufferPoolSize);
  964. /// <summary>
  965. /// 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍)
  966. /// </summary>
  967. /// <param name="pClient"></param>
  968. /// <param name="dwFreeBufferPoolHold"></param>
  969. [DllImport(HPSOCKET_DLL_PATH)]
  970. public static extern void HP_Client_SetFreeBufferPoolHold(IntPtr pClient, uint dwFreeBufferPoolHold);
  971. /// <summary>
  972. /// 获取内存块缓存池大小
  973. /// </summary>
  974. /// <param name="pClient"></param>
  975. [DllImport(HPSOCKET_DLL_PATH)]
  976. public static extern uint HP_Client_GetFreeBufferPoolSize(IntPtr pClient);
  977. /// <summary>
  978. /// 获取内存块缓存池回收阀值
  979. /// </summary>
  980. /// <param name="pClient"></param>
  981. [DllImport(HPSOCKET_DLL_PATH)]
  982. public static extern uint HP_Client_GetFreeBufferPoolHold(IntPtr pClient);
  983. /**********************************************************************************/
  984. /***************************** TCP Client 操作方法 *****************************/
  985. /// <summary>
  986. /// 名称:发送小文件
  987. /// 描述:向指定连接发送 4096 KB 以下的小文件
  988. /// </summary>
  989. /// <param name="pServer"></param>
  990. /// <param name="lpszFileName">文件路径</param>
  991. /// <param name="pHead">头部附加数据</param>
  992. /// <param name="pTail">尾部附加数据</param>
  993. /// <returns>TRUE.成功 FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
  994. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
  995. public static extern bool HP_TcpClient_SendSmallFile(IntPtr pClient, string lpszFileName, ref WSABUF pHead, ref WSABUF pTail);
  996. /**********************************************************************************/
  997. /***************************** TCP Client 属性访问方法 *****************************/
  998. /// <summary>
  999. /// 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为:(N * 1024) - sizeof(TBufferObj))
  1000. /// </summary>
  1001. /// <param name="pClient"></param>
  1002. /// <param name="dwSocketBufferSize"></param>
  1003. [DllImport(HPSOCKET_DLL_PATH)]
  1004. public static extern void HP_TcpClient_SetSocketBufferSize(IntPtr pClient, uint dwSocketBufferSize);
  1005. /// <summary>
  1006. /// 设置心跳包间隔(毫秒,0 则不发送心跳包)
  1007. /// </summary>
  1008. /// <param name="pClient"></param>
  1009. /// <param name="dwKeepAliveTime"></param>
  1010. [DllImport(HPSOCKET_DLL_PATH)]
  1011. public static extern void HP_TcpClient_SetKeepAliveTime(IntPtr pClient, uint dwKeepAliveTime);
  1012. /// <summary>
  1013. /// 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线)
  1014. /// </summary>
  1015. /// <param name="pClient"></param>
  1016. /// <param name="dwKeepAliveInterval"></param>
  1017. [DllImport(HPSOCKET_DLL_PATH)]
  1018. public static extern void HP_TcpClient_SetKeepAliveInterval(IntPtr pClient, uint dwKeepAliveInterval);
  1019. /// <summary>
  1020. /// 获取通信数据缓冲区大小
  1021. /// </summary>
  1022. /// <param name="pClient"></param>
  1023. /// <returns></returns>
  1024. [DllImport(HPSOCKET_DLL_PATH)]
  1025. public static extern uint HP_TcpClient_GetSocketBufferSize(IntPtr pClient);
  1026. /// <summary>
  1027. /// 获取心跳检查次数
  1028. /// </summary>
  1029. /// <param name="pClient"></param>
  1030. /// <returns></returns>
  1031. [DllImport(HPSOCKET_DLL_PATH)]
  1032. public static extern uint HP_TcpClient_GetKeepAliveTime(IntPtr pClient);
  1033. /// <summary>
  1034. /// 获取心跳检查间隔
  1035. /// </summary>
  1036. /// <param name="pClient"></param>
  1037. /// <returns></returns>
  1038. [DllImport(HPSOCKET_DLL_PATH)]
  1039. public static extern uint HP_TcpClient_GetKeepAliveInterval(IntPtr pClient);
  1040. /**********************************************************************************/
  1041. /***************************** UDP Client 属性访问方法 *****************************/
  1042. /// <summary>
  1043. /// 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节)
  1044. /// </summary>
  1045. /// <param name="pClient"></param>
  1046. /// <param name="dwMaxDatagramSize"></param>
  1047. [DllImport(HPSOCKET_DLL_PATH)]
  1048. public static extern void HP_UdpClient_SetMaxDatagramSize(IntPtr pClient, uint dwMaxDatagramSize);
  1049. /// <summary>
  1050. /// 获取数据报文最大长度
  1051. /// </summary>
  1052. /// <param name="pClient"></param>
  1053. /// <returns></returns>
  1054. [DllImport(HPSOCKET_DLL_PATH)]
  1055. public static extern uint HP_UdpClient_GetMaxDatagramSize(IntPtr pClient);
  1056. /// <summary>
  1057. /// 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线
  1058. /// </summary>
  1059. /// <param name="pClient"></param>
  1060. /// <param name="dwDetectAttempts"></param>
  1061. [DllImport(HPSOCKET_DLL_PATH)]
  1062. public static extern void HP_UdpClient_SetDetectAttempts(IntPtr pClient, uint dwDetectAttempts);
  1063. /// <summary>
  1064. /// 设置监测包发送间隔(秒,0 不发送监测包)
  1065. /// </summary>
  1066. /// <param name="pClient"></param>
  1067. /// <param name="dwDetectInterval"></param>
  1068. [DllImport(HPSOCKET_DLL_PATH)]
  1069. public static extern void HP_UdpClient_SetDetectInterval(IntPtr pClient, uint dwDetectInterval);
  1070. /// <summary>
  1071. /// 获取心跳检查次数
  1072. /// </summary>
  1073. /// <param name="pClient"></param>
  1074. /// <returns></returns>
  1075. [DllImport(HPSOCKET_DLL_PATH)]
  1076. public static extern uint HP_UdpClient_GetDetectAttempts(IntPtr pClient);
  1077. /// <summary>
  1078. /// 获取心跳检查间隔
  1079. /// </summary>
  1080. /// <param name="pClient"></param>
  1081. /// <returns></returns>
  1082. [DllImport(HPSOCKET_DLL_PATH)]
  1083. public static extern uint HP_UdpClient_GetDetectInterval(IntPtr pClient);
  1084. /**************************************************************************/
  1085. /***************************** Agent 操作方法 *****************************/
  1086. /// <summary>
  1087. /// 启动通信组件
  1088. /// 启动通信代理组件,启动完成后可开始连接远程服务器
  1089. /// </summary>
  1090. /// <param name="pAgent"></param>
  1091. /// <param name="pszBindAddress">监听地址</param>
  1092. /// <param name="bAsyncConnect">是否采用异步 Connect</param>
  1093. /// <returns>失败,可通过 GetLastError() 获取错误代码</returns>
  1094. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
  1095. public static extern bool HP_Agent_Start(IntPtr pAgent, string pszBindAddress, bool bAsyncConnect);
  1096. /// <summary>
  1097. /// 关闭通信组件
  1098. /// 关闭通信组件,关闭完成后断开所有连接并释放所有资源
  1099. /// </summary>
  1100. /// <param name="pAgent"></param>
  1101. /// <returns>-- 失败,可通过 GetLastError() 获取错误代码</returns>
  1102. [DllImport(HPSOCKET_DLL_PATH)]
  1103. public static extern bool HP_Agent_Stop(IntPtr pAgent);
  1104. /// <summary>
  1105. /// 连接服务器
  1106. /// 连接服务器,连接成功后 IAgentListener 会接收到 OnConnect() 事件
  1107. /// </summary>
  1108. /// <param name="pAgent"></param>
  1109. /// <param name="pszBindAddress">服务端地址</param>
  1110. /// <param name="usPort">服务端端口</param>
  1111. /// <param name="pconnId">传出连接 ID</param>
  1112. /// <returns>失败,可通过 SYS_GetLastError() 获取 Windows 错误代码</returns>
  1113. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
  1114. public static extern bool HP_Agent_Connect(IntPtr pAgent, string pszBindAddress, ushort usPort, ref IntPtr pconnId);
  1115. /// <summary>
  1116. /// 发送数据
  1117. /// 用户通过该方法向指定连接发送数据
  1118. /// </summary>
  1119. /// <param name="pAgent"></param>
  1120. /// <param name="connId">连接 ID</param>
  1121. /// <param name="pBuffer">发送数据缓冲区</param>
  1122. /// <param name="length">发送数据长度</param>
  1123. /// <returns></returns>
  1124. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
  1125. public static extern bool HP_Agent_Send(IntPtr pAgent, IntPtr connId, byte[] pBuffer, int length);
  1126. /// <summary>
  1127. /// 发送数据
  1128. /// 用户通过该方法向指定连接发送数据
  1129. /// </summary>
  1130. /// <param name="pAgent"></param>
  1131. /// <param name="connId">连接 ID</param>
  1132. /// <param name="pBuffer">发送数据缓冲区</param>
  1133. /// <param name="length">发送数据长度</param>
  1134. /// <returns></returns>
  1135. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  1136. public static extern bool HP_Agent_Send(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length);
  1137. /// <summary>
  1138. /// 发送数据
  1139. /// 用户通过该方法向指定连接发送数据
  1140. /// </summary>
  1141. /// <param name="pAgent"></param>
  1142. /// <param name="connId"></param>
  1143. /// <param name="pBuffer"></param>
  1144. /// <param name="length"></param>
  1145. /// <param name="iOffset">针对pBuffer的偏移</param>
  1146. /// <returns></returns>
  1147. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  1148. public static extern bool HP_Agent_SendPart(IntPtr pAgent, IntPtr connId, byte[] pBuffer, int length, int iOffset);
  1149. /// <summary>
  1150. /// 发送数据
  1151. /// 用户通过该方法向指定连接发送数据
  1152. /// </summary>
  1153. /// <param name="pAgent"></param>
  1154. /// <param name="connId"></param>
  1155. /// <param name="pBuffer"></param>
  1156. /// <param name="length"></param>
  1157. /// <param name="iOffset">针对pBuffer的偏移</param>
  1158. /// <returns></returns>
  1159. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  1160. public static extern bool HP_Agent_SendPart(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length, int iOffset);
  1161. /// <summary>
  1162. /// 发送多组数据
  1163. /// 向指定连接发送多组数据
  1164. /// TCP - 顺序发送所有数据包
  1165. /// UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
  1166. /// </summary>
  1167. /// <param name="pAgent"></param>
  1168. /// <param name="connId">连接 ID</param>
  1169. /// <param name="pBuffers">发送缓冲区数组</param>
  1170. /// <param name="iCount">发送缓冲区数目</param>
  1171. /// <returns>TRUE.成功,FALSE .失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
  1172. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  1173. public static extern bool HP_Agent_SendPackets(IntPtr pAgent, IntPtr connId, WSABUF[] pBuffers, int iCount);
  1174. /// <summary>
  1175. /// 断开某个连接
  1176. /// </summary>
  1177. /// <param name="pAgent"></param>
  1178. /// <param name="connId">连接 ID</param>
  1179. /// <param name="bForce">是否强制断开连接</param>
  1180. /// <returns></returns>
  1181. [DllImport(HPSOCKET_DLL_PATH)]
  1182. public static extern bool HP_Agent_Disconnect(IntPtr pAgent, IntPtr connId, bool bForce);
  1183. /// <summary>
  1184. /// 断开超过指定时长的连接
  1185. /// </summary>
  1186. /// <param name="pAgent"></param>
  1187. /// <param name="dwPeriod">时长(毫秒)</param>
  1188. /// <param name="bForce">是否强制断开连接</param>
  1189. /// <returns></returns>
  1190. [DllImport(HPSOCKET_DLL_PATH)]
  1191. public static extern bool HP_Agent_DisconnectLongConnections(IntPtr pAgent, uint dwPeriod, bool bForce);
  1192. /// <summary>
  1193. /// 断开超过指定时长的静默连接
  1194. /// </summary>
  1195. /// <param name="pServer"></param>
  1196. /// <param name="dwPeriod">时长(毫秒)</param>
  1197. /// <param name="bForce">是否强制断开连接</param>
  1198. /// <returns></returns>
  1199. [DllImport(HPSOCKET_DLL_PATH)]
  1200. public static extern bool HP_Agent_DisconnectSilenceConnections(IntPtr pAgent, uint dwPeriod, bool bForce);
  1201. /******************************************************************************/
  1202. /***************************** Agent 操作方法 *****************************/
  1203. /// <summary>
  1204. /// 名称:发送小文件
  1205. /// 描述:向指定连接发送 4096 KB 以下的小文件
  1206. /// </summary>
  1207. /// <param name="pServer"></param>
  1208. /// <param name="connId">连接 ID</param>
  1209. /// <param name="lpszFileName">文件路径</param>
  1210. /// <param name="pHead">头部附加数据</param>
  1211. /// <param name="pTail">尾部附加数据</param>
  1212. /// <returns>TRUE.成功 FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
  1213. [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
  1214. public static extern bool HP_TcpAgent_SendSmallFile(IntPtr pAgent, IntPtr connId, string lpszFileName, ref WSABUF pHead, ref WSABUF pTail);
  1215. /******************************************************************************/
  1216. /***************************** Agent 属性访问方法 *****************************/
  1217. /// <summary>
  1218. /// 设置数据发送策略
  1219. /// </summary>
  1220. /// <param name="pAgent"></param>
  1221. /// <param name="enSendPolicy"></param>
  1222. [DllImport(HPSOCKET_DLL_PATH)]
  1223. public static extern void HP_Agent_SetSendPolicy(IntPtr pAgent, SendPolicy enSendPolicy);
  1224. /// <summary>
  1225. /// 获取数据发送策略
  1226. /// </summary>
  1227. /// <param name="pAgent"></param>
  1228. /// <returns></returns>
  1229. [DllImport(HPSOCKET_DLL_PATH)]
  1230. public static extern SendPolicy HP_Agent_GetSendPolicy(IntPtr pAgent);
  1231. /// <summary>
  1232. /// 设置连接的附加数据
  1233. /// 是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  1234. /// </summary>
  1235. /// <param name="pAgent"></param>
  1236. /// <param name="connId">连接 ID</param>
  1237. /// <param name="pExtra">数据</param>
  1238. /// <returns>FALSE -- 失败(无效的连接 ID)</returns>
  1239. [DllImport(HPSOCKET_DLL_PATH)]
  1240. public static extern bool HP_Agent_SetConnectionExtra(IntPtr pAgent, IntPtr connId, IntPtr pExtra);
  1241. /// <summary>
  1242. /// 获取连接的附加数据
  1243. /// 是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  1244. /// </summary>
  1245. /// <param name="pAgent"></param>
  1246. /// <param name="connId"></param>
  1247. /// <param name="pExtra"></param>
  1248. /// <returns></returns>
  1249. [DllImport(HPSOCKET_DLL_PATH)]
  1250. public static extern bool HP_Agent_GetConnectionExtra(IntPtr pAgent, IntPtr connId, ref IntPtr pExtra);
  1251. /// <summary>
  1252. /// 检查通信组件是否已启动
  1253. /// </summary>
  1254. /// <param name="pAgent"></param>
  1255. /// <returns></returns>
  1256. [DllImport(HPSOCKET_DLL_PATH)]
  1257. public static extern bool HP_Agent_HasStarted(IntPtr pAgent);
  1258. /// <summary>
  1259. /// 查看通信组件当前状态
  1260. /// </summary>
  1261. /// <param name="pAgent"></param>
  1262. /// <returns></returns>
  1263. [DllImport(HPSOCKET_DLL_PATH)]
  1264. public static extern ServiceState HP_Agent_GetState(IntPtr pAgent);
  1265. /// <summary>
  1266. /// 获取连接数
  1267. /// </summary>
  1268. /// <param name="pAgent"></param>
  1269. /// <returns></returns>
  1270. [DllImport(HPSOCKET_DLL_PATH)]
  1271. public static extern uint HP_Agent_GetConnectionCount(IntPtr pAgent);
  1272. /// <summary>
  1273. /// 获取所有连接的 CONNID
  1274. /// </summary>
  1275. /// <param name="pServer"></param>
  1276. /// <param name="pIDs"></param>
  1277. /// <param name="pdwCount"></param>
  1278. /// <returns></returns>
  1279. [DllImport(HPSOCKET_DLL_PATH)]
  1280. public static extern bool HP_Agent_GetAllConnectionIDs(IntPtr pAgent, IntPtr[] pIDs, ref uint pdwCount);
  1281. /// <summary>
  1282. /// 获取某个连接时长(毫秒)
  1283. /// </summary>
  1284. /// <param name="pAgent"></param>
  1285. /// <param name="connId"></param>
  1286. /// <param name="pdwPeriod"></param>
  1287. /// <returns></returns>
  1288. [DllImport(HPSOCKET_DLL_PATH)]
  1289. public static extern bool HP_Agent_GetConnectPeriod(IntPtr pAgent, IntPtr connId, ref uint pdwPeriod);
  1290. /// <summary>
  1291. /// 获取某个连接静默时间(毫秒)
  1292. /// </summary>
  1293. /// <param name="pServer"></param>
  1294. /// <param name="connId"></param>
  1295. /// <param name="pdwPeriod"></param>
  1296. /// <returns></returns>
  1297. [DllImport(HPSOCKET_DLL_PATH)]
  1298. public static extern bool HP_Agent_GetSilencePeriod(IntPtr pAgent, IntPtr connId, ref uint pdwPeriod);
  1299. /// <summary>
  1300. /// 获取监听 Socket 的地址信息
  1301. /// </summary>
  1302. /// <param name="pAgent"></param>
  1303. /// <param name="connId"></param>
  1304. /// <param name="lpszAddress"></param>
  1305. /// <param name="piAddressLen"></param>
  1306. /// <param name="pusPort"></param>
  1307. /// <returns></returns>
  1308. [DllImport(HPSOCKET_DLL_PATH)]
  1309. public static extern bool HP_Agent_GetLocalAddress(IntPtr pAgent, IntPtr connId, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
  1310. /// <summary>
  1311. /// 获取某个连接的地址信息
  1312. /// </summary>
  1313. /// <param name="pAgent"></param>
  1314. /// <param name="connId"></param>
  1315. /// <param name="lpszAddress"></param>
  1316. /// <param name="piAddressLen"></param>
  1317. /// <param name="pusPort"></param>
  1318. /// <returns></returns>
  1319. [DllImport(HPSOCKET_DLL_PATH)]
  1320. public static extern bool HP_Agent_GetRemoteAddress(IntPtr pAgent, IntPtr connId, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
  1321. /// <summary>
  1322. /// 获取最近一次失败操作的错误代码
  1323. /// </summary>
  1324. /// <param name="pAgent"></param>
  1325. /// <returns></returns>
  1326. [DllImport(HPSOCKET_DLL_PATH)]
  1327. public static extern SocketError HP_Agent_GetLastError(IntPtr pAgent);
  1328. /// <summary>
  1329. /// 获取最近一次失败操作的错误描述
  1330. /// </summary>
  1331. /// <param name="pAgent"></param>
  1332. /// <returns></returns>
  1333. [DllImport(HPSOCKET_DLL_PATH)]
  1334. public static extern IntPtr HP_Agent_GetLastErrorDesc(IntPtr pAgent);
  1335. /// <summary>
  1336. /// 获取连接中未发出数据的长度
  1337. /// </summary>
  1338. /// <param name="pAgent"></param>
  1339. /// <param name="connId"></param>
  1340. /// <param name="piPending"></param>
  1341. [DllImport(HPSOCKET_DLL_PATH)]
  1342. public static extern bool HP_Agent_GetPendingDataLength(IntPtr pAgent, IntPtr connId, ref int piPending);
  1343. /// <summary>
  1344. /// 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用)
  1345. /// </summary>
  1346. /// <param name="pAgent"></param>
  1347. /// <param name="dwFreeSocketObjLockTime"></param>
  1348. [DllImport(HPSOCKET_DLL_PATH)]
  1349. public static extern void HP_Agent_SetFreeSocketObjLockTime(IntPtr pAgent, uint dwFreeSocketObjLockTime);
  1350. /// <summary>
  1351. /// 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2)
  1352. /// </summary>
  1353. /// <param name="pAgent"></param>
  1354. /// <param name="dwFreeSocketObjPool"></param>
  1355. [DllImport(HPSOCKET_DLL_PATH)]
  1356. public static extern void HP_Agent_SetFreeSocketObjPool(IntPtr pAgent, uint dwFreeSocketObjPool);
  1357. /// <summary>
  1358. /// 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍)
  1359. /// </summary>
  1360. /// <param name="pAgent"></param>
  1361. /// <param name="dwFreeBufferObjPool"></param>
  1362. [DllImport(HPSOCKET_DLL_PATH)]
  1363. public static extern void HP_Agent_SetFreeBufferObjPool(IntPtr pAgent, uint dwFreeBufferObjPool);
  1364. /// <summary>
  1365. /// 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍)
  1366. /// </summary>
  1367. /// <param name="pAgent"></param>
  1368. /// <param name="dwFreeSocketObjHold"></param>
  1369. [DllImport(HPSOCKET_DLL_PATH)]
  1370. public static extern void HP_Agent_SetFreeSocketObjHold(IntPtr pAgent, uint dwFreeSocketObjHold);
  1371. /// <summary>
  1372. /// 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍)
  1373. /// </summary>
  1374. /// <param name="pAgent"></param>
  1375. /// <param name="dwFreeBufferObjHold"></param>
  1376. [DllImport(HPSOCKET_DLL_PATH)]
  1377. public static extern void HP_Agent_SetFreeBufferObjHold(IntPtr pAgent, uint dwFreeBufferObjHold);
  1378. /// <summary>
  1379. /// 设置工作线程数量(通常设置为 2 * CPU + 2)
  1380. /// </summary>
  1381. /// <param name="pAgent"></param>
  1382. /// <param name="dwWorkerThreadCount"></param>
  1383. [DllImport(HPSOCKET_DLL_PATH)]
  1384. public static extern void HP_Agent_SetWorkerThreadCount(IntPtr pAgent, uint dwWorkerThreadCount);
  1385. /// <summary>
  1386. /// 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE)
  1387. /// </summary>
  1388. /// <param name="pServer"></param>
  1389. /// <param name="bMarkSilence"></param>
  1390. [DllImport(HPSOCKET_DLL_PATH)]
  1391. public static extern void HP_Agent_SetMarkSilence(IntPtr pAgent, bool bMarkSilence);
  1392. /// <summary>
  1393. /// 获取 Socket 缓存对象锁定时间
  1394. /// </summary>
  1395. /// <param name="pAgent"></param>
  1396. /// <returns></returns>
  1397. [DllImport(HPSOCKET_DLL_PATH)]
  1398. public static extern uint HP_Agent_GetFreeSocketObjLockTime(IntPtr pAgent);
  1399. /// <summary>
  1400. /// 获取 Socket 缓存池大小
  1401. /// </summary>
  1402. /// <param name="pAgent"></param>
  1403. /// <returns></returns>
  1404. [DllImport(HPSOCKET_DLL_PATH)]
  1405. public static extern uint HP_Agent_GetFreeSocketObjPool(IntPtr pAgent);
  1406. /// <summary>
  1407. /// 获取内存块缓存池大小
  1408. /// </summary>
  1409. /// <param name="pAgent"></param>
  1410. /// <returns></returns>
  1411. [DllImport(HPSOCKET_DLL_PATH)]
  1412. public static extern uint HP_Agent_GetFreeBufferObjPool(IntPtr pAgent);
  1413. /// <summary>
  1414. /// 获取 Socket 缓存池回收阀值
  1415. /// </summary>
  1416. /// <param name="pAgent"></param>
  1417. /// <returns></returns>
  1418. [DllImport(HPSOCKET_DLL_PATH)]
  1419. public static extern uint HP_Agent_GetFreeSocketObjHold(IntPtr pAgent);
  1420. /// <summary>
  1421. /// 获取内存块缓存池回收阀值
  1422. /// </summary>
  1423. /// <param name="pAgent"></param>
  1424. /// <returns></returns>
  1425. [DllImport(HPSOCKET_DLL_PATH)]
  1426. public static extern uint HP_Agent_GetFreeBufferObjHold(IntPtr pAgent);
  1427. /// <summary>
  1428. /// 获取工作线程数量
  1429. /// </summary>
  1430. /// <param name="pAgent"></param>
  1431. /// <returns></returns>
  1432. [DllImport(HPSOCKET_DLL_PATH)]
  1433. public static extern uint HP_Agent_GetWorkerThreadCount(IntPtr pAgent);
  1434. /// <summary>
  1435. /// 检测是否标记静默时间
  1436. /// </summary>
  1437. /// <param name="pServer"></param>
  1438. /// <returns></returns>
  1439. [DllImport(HPSOCKET_DLL_PATH)]
  1440. public static extern bool HP_Agent_IsMarkSilence(IntPtr pAgent);
  1441. /**********************************************************************************/
  1442. /***************************** TCP Agent 属性访问方法 *****************************/
  1443. /// <summary>
  1444. /// 置是否启用地址重用机制(默认:不启用)
  1445. /// </summary>
  1446. /// <param name="pAgent"></param>
  1447. /// <param name="bReuseAddress"></param>
  1448. [DllImport(HPSOCKET_DLL_PATH)]
  1449. public static extern void HP_TcpAgent_SetReuseAddress(IntPtr pAgent, bool bReuseAddress);
  1450. /// <summary>
  1451. /// 检测是否启用地址重用机制
  1452. /// </summary>
  1453. /// <param name="pAgent"></param>
  1454. /// <returns></returns>
  1455. [DllImport(HPSOCKET_DLL_PATH)]
  1456. public static extern bool HP_TcpAgent_IsReuseAddress(IntPtr pAgent);
  1457. /// <summary>
  1458. /// 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数)
  1459. /// </summary>
  1460. /// <param name="pAgent"></param>
  1461. /// <param name="dwSocketBufferSize"></param>
  1462. [DllImport(HPSOCKET_DLL_PATH)]
  1463. public static extern void HP_TcpAgent_SetSocketBufferSize(IntPtr pAgent, uint dwSocketBufferSize);
  1464. /// <summary>
  1465. /// 设置心跳包间隔(毫秒,0 则不发送心跳包)
  1466. /// </summary>
  1467. /// <param name="pAgent"></param>
  1468. /// <param name="dwKeepAliveTime"></param>
  1469. [DllImport(HPSOCKET_DLL_PATH)]
  1470. public static extern void HP_TcpAgent_SetKeepAliveTime(IntPtr pAgent, uint dwKeepAliveTime);
  1471. /// <summary>
  1472. /// 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线)
  1473. /// </summary>
  1474. /// <param name="pAgent"></param>
  1475. /// <param name="dwKeepAliveInterval"></param>
  1476. [DllImport(HPSOCKET_DLL_PATH)]
  1477. public static extern void HP_TcpAgent_SetKeepAliveInterval(IntPtr pAgent, uint dwKeepAliveInterval);
  1478. /// <summary>
  1479. /// 获取通信数据缓冲区大小
  1480. /// </summary>
  1481. /// <param name="pAgent"></param>
  1482. /// <returns></returns>
  1483. [DllImport(HPSOCKET_DLL_PATH)]
  1484. public static extern uint HP_TcpAgent_GetSocketBufferSize(IntPtr pAgent);
  1485. /// <summary>
  1486. /// 获取心跳检查次数
  1487. /// </summary>
  1488. /// <param name="pAgent"></param>
  1489. /// <returns></returns>
  1490. [DllImport(HPSOCKET_DLL_PATH)]
  1491. public static extern uint HP_TcpAgent_GetKeepAliveTime(IntPtr pAgent);
  1492. /// <summary>
  1493. /// 获取心跳检查间隔
  1494. /// </summary>
  1495. /// <param name="pAgent"></param>
  1496. /// <returns></returns>
  1497. [DllImport(HPSOCKET_DLL_PATH)]
  1498. public static extern uint HP_TcpAgent_GetKeepAliveInterval(IntPtr pAgent);
  1499. /***************************************************************************************/
  1500. /***************************** TCP Pull Server 组件操作方法 *****************************/
  1501. /// <summary>
  1502. /// 抓取数据
  1503. /// 用户通过该方法从 Socket 组件中抓取数据
  1504. /// </summary>
  1505. /// <param name="pServer"></param>
  1506. /// <param name="connId">连接 ID</param>
  1507. /// <param name="pBuffer">数据抓取缓冲区</param>
  1508. /// <param name="length">抓取数据长度</param>
  1509. /// <returns></returns>
  1510. [DllImport(HPSOCKET_DLL_PATH)]
  1511. public static extern FetchResult HP_TcpPullServer_Fetch(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length);
  1512. /// <summary>
  1513. /// 窥探数据(不会移除缓冲区数据)
  1514. /// 描述:用户通过该方法从 Socket 组件中窥探数据
  1515. /// </summary>
  1516. /// <param name="pServer"></param>
  1517. /// <param name="connId">连接 ID</param>
  1518. /// <param name="pBuffer">窥探缓冲区</param>
  1519. /// <param name="length">窥探数据长度</param>
  1520. /// <returns></returns>
  1521. [DllImport(HPSOCKET_DLL_PATH)]
  1522. public static extern FetchResult HP_TcpPullServer_Peek(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length);
  1523. /***************************************************************************************/
  1524. /***************************** TCP Pull Server 属性访问方法 *****************************/
  1525. /***************************************************************************************/
  1526. /***************************** TCP Pull Client 组件操作方法 *****************************/
  1527. /// <summary>
  1528. /// 抓取数据
  1529. /// 用户通过该方法从 Socket 组件中抓取数据
  1530. /// </summary>
  1531. /// <param name="pClient"></param>
  1532. /// <param name="connId">连接 ID</param>
  1533. /// <param name="pBuffer">数据抓取缓冲区</param>
  1534. /// <param name="length">抓取数据长度</param>
  1535. /// <returns></returns>
  1536. [DllImport(HPSOCKET_DLL_PATH)]
  1537. public static extern FetchResult HP_TcpPullClient_Fetch(IntPtr pClient, IntPtr pBuffer, int length);
  1538. /// <summary>
  1539. /// 名称:窥探数据(不会移除缓冲区数据)
  1540. /// 描述:用户通过该方法从 Socket 组件中窥探数据
  1541. /// </summary>
  1542. /// <param name="pClient"></param>
  1543. /// <param name="connId">连接 ID</param>
  1544. /// <param name="pBuffer">数据抓取缓冲区</param>
  1545. /// <param name="length">抓取数据长度</param>
  1546. /// <returns></returns>
  1547. [DllImport(HPSOCKET_DLL_PATH)]
  1548. public static extern FetchResult HP_TcpPullClient_Peek(IntPtr pClient, IntPtr pBuffer, int length);
  1549. /***************************************************************************************/
  1550. /***************************** TCP Pull Client 属性访问方法 *****************************/
  1551. /***************************************************************************************/
  1552. /***************************** TCP Pull Agent 组件操作方法 *****************************/
  1553. /// <summary>
  1554. /// 抓取数据
  1555. /// 用户通过该方法从 Socket 组件中抓取数据
  1556. /// </summary>
  1557. /// <param name="pAgent"></param>
  1558. /// <param name="connId">连接 ID</param>
  1559. /// <param name="pBuffer">数据抓取缓冲区</param>
  1560. /// <param name="length">抓取数据长度</param>
  1561. /// <returns></returns>
  1562. [DllImport(HPSOCKET_DLL_PATH)]
  1563. public static extern FetchResult HP_TcpPullAgent_Fetch(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length);
  1564. /// <summary>
  1565. /// 名称:窥探数据(不会移除缓冲区数据)
  1566. /// 描述:用户通过该方法从 Socket 组件中窥探数据
  1567. /// </summary>
  1568. /// <param name="pAgent"></param>
  1569. /// <param name="connId">连接 ID</param>
  1570. /// <param name="pBuffer">数据抓取缓冲区</param>
  1571. /// <param name="length">抓取数据长度</param>
  1572. /// <returns></returns>
  1573. [DllImport(HPSOCKET_DLL_PATH)]
  1574. public static extern FetchResult HP_TcpPullAgent_Peek(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length);
  1575. /***************************************************************************************/
  1576. /***************************** TCP Pull Agent 属性访问方法 *****************************/
  1577. /***************************************************************************************/
  1578. /***************************************************************************************/
  1579. /***************************** TCP Pack Server 组件操作方法 *****************************/
  1580. /***************************************************************************************/
  1581. /***************************** TCP Pack Server 属性访问方法 *****************************/
  1582. /// <summary>
  1583. /// 设置数据包最大长度(有效数据包最大长度不能超过 4194303/0x3FFFFF 字节,默认:262144/0x40000)
  1584. /// </summary>
  1585. /// <param name="pServer"></param>
  1586. /// <param name="dwMaxPackSize">有效数据包最大长度不能超过 4194303/0x3FFFFF 字节,默认:262144/0x40000</param>
  1587. [DllImport(HPSOCKET_DLL_PATH)]
  1588. public static extern void HP_TcpPackServer_SetMaxPackSize(IntPtr pServer, uint dwMaxPackSize);
  1589. /// <summary>
  1590. /// 设置包头标识(有效包头标识取值范围 0 ~ 1023/0x3FF,当包头标识为 0 时不校验包头,默认:0)
  1591. /// </summary>
  1592. /// <param name="pServer"></param>
  1593. /// <param name="usPackHeaderFlag">有效包头标识取值范围 0 ~ 1023/0x3FF,当包头标识为 0 时不校验包头,默认:0</param>
  1594. [DllImport(HPSOCKET_DLL_PATH)]
  1595. public static extern void HP_TcpPackServer_SetPackHeaderFlag(IntPtr pServer, ushort usPackHeaderFlag);
  1596. /// <summary>
  1597. /// 获取数据包最大长度
  1598. /// </summary>
  1599. /// <param name="pServer"></param>
  1600. /// <returns></returns>
  1601. [DllImport(HPSOCKET_DLL_PATH)]
  1602. public static extern uint HP_TcpPackServer_GetMaxPackSize(IntPtr pServer);
  1603. /// <summary>
  1604. /// 获取包头标识
  1605. /// </summary>
  1606. /// <param name="pServer"></param>
  1607. /// <returns></returns>
  1608. [DllImport(HPSOCKET_DLL_PATH)]
  1609. public static extern ushort HP_TcpPackServer_GetPackHeaderFlag(IntPtr pServer);
  1610. /***************************************************************************************/
  1611. /***************************** TCP Pack Agent 组件操作方法 *****************************/
  1612. /***************************************************************************************/
  1613. /***************************** TCP Pack Agent 属性访问方法 *****************************/
  1614. /// <summary>
  1615. /// 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000)
  1616. /// </summary>
  1617. /// <param name="pServer"></param>
  1618. /// <param name="dwMaxPackSize">有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000</param>
  1619. [DllImport(HPSOCKET_DLL_PATH)]
  1620. public static extern void HP_TcpPackAgent_SetMaxPackSize(IntPtr pAgent, uint dwMaxPackSize);
  1621. /// <summary>
  1622. /// 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0)
  1623. /// </summary>
  1624. /// <param name="pServer"></param>
  1625. /// <param name="usPackHeaderFlag">有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0</param>
  1626. [DllImport(HPSOCKET_DLL_PATH)]
  1627. public static extern void HP_TcpPackAgent_SetPackHeaderFlag(IntPtr pAgent, ushort usPackHeaderFlag);
  1628. /// <summary>
  1629. /// 获取数据包最大长度
  1630. /// </summary>
  1631. /// <param name="pServer"></param>
  1632. /// <returns></returns>
  1633. [DllImport(HPSOCKET_DLL_PATH)]
  1634. public static extern uint HP_TcpPackAgent_GetMaxPackSize(IntPtr pAgent);
  1635. /// <summary>
  1636. /// 获取包头标识
  1637. /// </summary>
  1638. /// <param name="pServer"></param>
  1639. /// <returns></returns>
  1640. [DllImport(HPSOCKET_DLL_PATH)]
  1641. public static extern ushort HP_TcpPackAgent_GetPackHeaderFlag(IntPtr pAgent);
  1642. /***************************************************************************************/
  1643. /***************************** TCP Pack Client 组件操作方法 *****************************/
  1644. /***************************************************************************************/
  1645. /***************************** TCP Pack Client 属性访问方法 *****************************/
  1646. /// <summary>
  1647. /// 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000)
  1648. /// </summary>
  1649. /// <param name="pServer"></param>
  1650. /// <param name="dwMaxPackSize">有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000</param>
  1651. [DllImport(HPSOCKET_DLL_PATH)]
  1652. public static extern void HP_TcpPackClient_SetMaxPackSize(IntPtr pClient, uint dwMaxPackSize);
  1653. /// <summary>
  1654. /// 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0)
  1655. /// </summary>
  1656. /// <param name="pServer"></param>
  1657. /// <param name="usPackHeaderFlag">有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0</param>
  1658. [DllImport(HPSOCKET_DLL_PATH)]
  1659. public static extern void HP_TcpPackClient_SetPackHeaderFlag(IntPtr pClient, ushort usPackHeaderFlag);
  1660. /// <summary>
  1661. /// 获取数据包最大长度
  1662. /// </summary>
  1663. /// <param name="pServer"></param>
  1664. /// <returns></returns>
  1665. [DllImport(HPSOCKET_DLL_PATH)]
  1666. public static extern uint HP_TcpPackClient_GetMaxPackSize(IntPtr pClient);
  1667. /// <summary>
  1668. /// 获取包头标识
  1669. /// </summary>
  1670. /// <param name="pServer"></param>
  1671. /// <returns></returns>
  1672. [DllImport(HPSOCKET_DLL_PATH)]
  1673. public static extern ushort HP_TcpPackClient_GetPackHeaderFlag(IntPtr pClient);
  1674. /***************************************************************************************/
  1675. /*************************************** 其它方法 ***************************************/
  1676. /// <summary>
  1677. /// 获取错误描述文本
  1678. /// </summary>
  1679. /// <param name="enCode"></param>
  1680. /// <returns></returns>
  1681. [DllImport(HPSOCKET_DLL_PATH)]
  1682. public static extern IntPtr HP_GetSocketErrorDesc(SocketError enCode);
  1683. /// <summary>
  1684. /// 调用系统的 ::GetLastError() 方法获取系统错误代码
  1685. /// </summary>
  1686. /// <returns></returns>
  1687. public static int SYS_GetLastError()
  1688. {
  1689. return Marshal.GetLastWin32Error();
  1690. }
  1691. /// <summary>
  1692. /// 调用系统的 ::WSAGetLastError() 方法获取通信错误代码
  1693. /// </summary>
  1694. /// <returns></returns>
  1695. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  1696. public static extern int SYS_WSAGetLastError();
  1697. /// <summary>
  1698. /// 调用系统的 setsockopt()
  1699. /// </summary>
  1700. /// <param name="sock"></param>
  1701. /// <param name="level"></param>
  1702. /// <param name="name"></param>
  1703. /// <param name="val"></param>
  1704. /// <param name="len"></param>
  1705. /// <returns></returns>
  1706. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  1707. public static extern int SYS_SetSocketOption(IntPtr sock, int level, int name, IntPtr val, int len);
  1708. /// <summary>
  1709. /// 调用系统的 getsockopt()
  1710. /// </summary>
  1711. /// <param name="sock"></param>
  1712. /// <param name="level"></param>
  1713. /// <param name="name"></param>
  1714. /// <param name="val"></param>
  1715. /// <param name="len"></param>
  1716. /// <returns></returns>
  1717. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  1718. public static extern int SYS_GetSocketOption(IntPtr sock, int level, int name, IntPtr val, ref int len);
  1719. /// <summary>
  1720. /// 调用系统的 ioctlsocket()
  1721. /// </summary>
  1722. /// <param name="sock"></param>
  1723. /// <param name="cmd"></param>
  1724. /// <param name="arg"></param>
  1725. /// <returns></returns>
  1726. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  1727. public static extern int SYS_IoctlSocket(IntPtr sock, long cmd, IntPtr arg);
  1728. /// <summary>
  1729. /// 调用系统的 ::WSAIoctl()
  1730. /// </summary>
  1731. /// <param name="sock"></param>
  1732. /// <param name="dwIoControlCode"></param>
  1733. /// <param name="lpvInBuffer"></param>
  1734. /// <param name="cbInBuffer"></param>
  1735. /// <param name="lpvOutBuffer"></param>
  1736. /// <param name="cbOutBuffer"></param>
  1737. /// <param name="lpcbBytesReturned"></param>
  1738. /// <returns></returns>
  1739. [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
  1740. public static extern int SYS_WSAIoctl(IntPtr sock, uint dwIoControlCode, IntPtr lpvInBuffer, uint cbInBuffer,
  1741. IntPtr lpvOutBuffer, uint cbOutBuffer, uint lpcbBytesReturned);
  1742. }
  1743. }