Sdk.cs 89 KB

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