HPSocketSDKUnit.pas 59 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147
  1. // _ooOoo_
  2. // o8888888o
  3. // 88" . "88
  4. // (| -_- |)
  5. // O\ = /O
  6. // ____/`---'\____
  7. // . ' \\| |// `.
  8. // / \\||| : |||// \
  9. // / _||||| -:- |||||- \
  10. // | | \\\ - /// | |
  11. // | \_| ''\---/'' | |
  12. // \ .-\__ `-` ___/-. /
  13. // ___`. .' /--.--\ `. . __
  14. // ."" '< `.___\_<|>_/___.' >'"".
  15. // | | : `- \`.;`\ _ /`;.`/ - ` : | |
  16. // \ \ `-. \_ __\ /__ _/ .-` / /
  17. // ======`-.____`-.___\_____/___.-`____.-'======
  18. // `=---='
  19. //
  20. // .............................................
  21. // 佛祖镇楼 BUG辟易
  22. // 佛曰:
  23. // 写字楼里写字间,写字间里程序员;
  24. // 程序人员写程序,又拿程序换酒钱。
  25. // 酒醒只在网上坐,酒醉还来网下眠;
  26. // 酒醉酒醒日复日,网上网下年复年。
  27. // 但愿老死电脑间,不愿鞠躬老板前;
  28. // 奔驰宝马贵者趣,公交自行程序员。
  29. // 别人笑我忒疯癫,我笑自己命太贱;
  30. // 不见满街漂亮妹,哪个归得程序员?
  31. unit HPSocketSDKUnit;
  32. interface
  33. uses
  34. Windows, SysUtils,DateUtils,StrUtils;
  35. const
  36. HPSocketDLL = 'HPSocket4C_U.dll';
  37. type
  38. {$Z4}
  39. SOCKET = Pointer;
  40. WSABUF = Record
  41. len: ULONG; { the length of the buffer }
  42. buf: PChar; { the pointer to the buffer }
  43. end { WSABUF };
  44. PWSABUF = ^WSABUF;
  45. LPWSABUF = PWSABUF;
  46. WSABUFArray = array of WSABUF;
  47. PInteger = ^Integer;
  48. PUShort = ^Word;
  49. { /************************************************************************
  50. 名称:连接 ID 数据类型
  51. 描述:定义连接 ID 的数据类型
  52. ************************************************************************/ }
  53. HP_CONNID = DWORD;
  54. PHP_CONNID = ^HP_CONNID;
  55. HP_CONNIDArray = array of HP_CONNID; { TODO : 这个数组变量用来获取所有连接id }
  56. { /************************************************************************
  57. 名称:定义 Socket 对象指针类型别名
  58. 描述:把 Socket 对象指针定义为更直观的别名
  59. ************************************************************************/ }
  60. HP_Object = longint;
  61. HP_Server = HP_Object;
  62. HP_Agent = HP_Object;
  63. HP_Client = HP_Object;
  64. HP_TcpServer = HP_Object;
  65. HP_HttpServer = HP_Object;
  66. HP_TcpAgent = HP_Object;
  67. HP_TcpClient = HP_Object;
  68. HP_PullSocket = HP_Object;
  69. HP_PullClient = HP_Object;
  70. HP_TcpPullServer = HP_Object;
  71. HP_TcpPullAgent = HP_Object;
  72. HP_TcpPullClient = HP_Object;
  73. HP_PackSocket = HP_Object;
  74. HP_PackClient = HP_Object;
  75. HP_TcpPackServer = HP_Object;
  76. HP_TcpPackAgent = HP_Object;
  77. HP_TcpPackClient = HP_Object;
  78. HP_UdpServer = HP_Object;
  79. HP_UdpClient = HP_Object;
  80. HP_UdpCast = HP_Object;
  81. HP_Listener = HP_Object;
  82. HP_ServerListener = HP_Object;
  83. HP_AgentListener = HP_Object;
  84. HP_ClientListener = HP_Object;
  85. HP_TcpServerListener = HP_Object;
  86. HP_HttpServerListener = HP_Object;
  87. HP_TcpAgentListener = HP_Object;
  88. HP_TcpClientListener = HP_Object;
  89. HP_PullSocketListener = HP_Object;
  90. HP_PullClientListener = HP_Object;
  91. HP_TcpPullServerListener = HP_Object;
  92. HP_TcpPullAgentListener = HP_Object;
  93. HP_TcpPullClientListener = HP_Object;
  94. HP_UdpServerListener = HP_Object;
  95. HP_UdpClientListener = HP_Object;
  96. HP_UdpCastListener = HP_Object;
  97. {******************************************** 公共类、接口 ********************************************/}
  98. {TODO:/************************************************************************
  99. 名称:通信组件服务状态
  100. 描述:应用程序可以通过通信组件的 GetState() 方法获取组件当前服务状态
  101. ************************************************************************ }
  102. En_HP_ServiceState = (
  103. HP_SS_STARTING = 0, // 正在启动
  104. HP_SS_STARTED = 1, // 已经启动
  105. HP_SS_STOPING = 2, // 正在停止
  106. HP_SS_STOPED = 3 // 已经停止
  107. );
  108. { TODO:************************************************************************
  109. 名称:Socket 操作类型
  110. 描述:应用程序的 OnErrror() 事件中通过该参数标识是哪种操作导致的错误
  111. ************************************************************************ }
  112. En_HP_SocketOperation = (
  113. HP_SO_UNKNOWN = 0, // Unknown
  114. HP_SO_ACCEPT = 1, // Acccept
  115. HP_SO_CONNECT = 2, // Connnect
  116. HP_SO_SEND = 3, // Send
  117. HP_SO_RECEIVE = 4, // Receive
  118. HP_SO_CLOSE = 5 // Close
  119. );
  120. {TODO: ************************************************************************
  121. 名称:事件通知处理结果
  122. 描述:事件通知的返回值,不同的返回值会影响通信组件的后续行为
  123. ************************************************************************ }
  124. En_HP_HandleResult = (
  125. HP_HR_OK = 0, // 成功处理
  126. HP_HR_IGNORE = 1, // 忽略处理
  127. HP_HR_ERROR = 2 // 错误处理
  128. );
  129. { TODO:/************************************************************************
  130. 名称:数据抓取结果
  131. 描述:数据抓取操作的返回值
  132. ************************************************************************/ }
  133. En_HP_FetchResult = (
  134. HP_FR_OK = 0, // 成功
  135. HP_FR_LENGTH_TOO_LONG = 1, // 抓取长度过大
  136. HP_FR_DATA_NOT_FOUND = 2 // 找不到 ConnID 对应的数据
  137. );
  138. { TODO:/************************************************************************
  139. 名称:数据发送策略
  140. 描述:Server 组件和 Agent 组件的数据发送策略
  141. * 打包模式(默认) :尽量把多个发送操作的数据组合在一起发送,增加传输效率
  142. * 安全模式 :尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出
  143. * 直接模式 :对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合
  144. ************************************************************************/ }
  145. En_HP_SendPolicy = (
  146. HP_SP_PACK = 0, // 打包模式(默认)
  147. HP_SP_SAFE = 1, // 安全模式
  148. HP_SP_DIRECT = 2 // 直接模式
  149. );
  150. { TODO:************************************************************************
  151. 名称:操作结果代码
  152. 描述:Start() / Stop() 方法执行失败时,可通过 GetLastError() 获取错误代码
  153. ************************************************************************ }
  154. En_HP_SocketError = (
  155. HP_SE_OK = 0, // 成功
  156. HP_SE_ILLEGAL_STATE = 1, // 当前状态不允许操作
  157. HP_SE_INVALID_PARAM = 2, // 非法参数
  158. HP_SE_SOCKET_CREATE = 3, // 创建 SOCKET 失败
  159. HP_SE_SOCKET_BIND = 4, // 绑定 SOCKET 失败
  160. HP_SE_SOCKET_PREPARE = 5, // 设置 SOCKET 失败
  161. HP_SE_SOCKET_LISTEN = 6, // 监听 SOCKET 失败
  162. HP_SE_CP_CREATE = 7, // 创建完成端口失败
  163. HP_SE_WORKER_THREAD_CREATE = 8, // 创建工作线程失败
  164. HP_SE_DETECT_THREAD_CREATE = 9, // 创建监测线程失败
  165. HP_SE_SOCKE_ATTACH_TO_CP = 10, // 绑定完成端口失败
  166. HP_SE_CONNECT_SERVER = 11, // 连接服务器失败
  167. HP_SE_NETWORK = 12, // 网络错误
  168. HP_SE_DATA_PROC = 13, // 数据处理错误
  169. HP_SE_DATA_SEND = 14, // 数据发送失败
  170. //***** SSL Socket 扩展操作结果代码 *****/
  171. HP_SE_SSL_ENV_NOT_READY = 101 // SSL 环境未就绪
  172. );
  173. {TODO:
  174. /************************************************************************
  175. 名称:播送模式
  176. 描述:UDP 组件的播送模式(组播或广播)
  177. ************************************************************************/}
  178. En_HP_CastMode = (
  179. HP_CM_MULTICAST = 0, // 组播
  180. HP_CM_BROADCAST = 1 // 广播
  181. );
  182. { /************** HPSocket4C.dll 回调函数 **************/ }
  183. {TODO: /* Tcp服务端回调函数 */ }
  184. HP_FN_Server_OnPrepareListen = function(soListen: Pointer): En_HP_HandleResult; stdcall;
  185. // 如果为 TCP 连接,pClient为 SOCKET 句柄;如果为 UDP 连接,pClient为 SOCKADDR_IN 指针;
  186. HP_FN_Server_OnAccept = function(dwConnID: HP_CONNID; pClient: Pointer): En_HP_HandleResult; stdcall;
  187. HP_FN_Server_OnHandShake = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
  188. HP_FN_Server_OnSend = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
  189. HP_FN_Server_OnReceive = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
  190. HP_FN_Server_OnPullReceive = function(dwConnID: HP_CONNID; iLength: Integer): En_HP_HandleResult; stdcall;
  191. HP_FN_Server_OnClose = function(dwConnID: HP_CONNID; enOperation: En_HP_SocketOperation; iErrorCode: Integer): En_HP_HandleResult; stdcall;
  192. HP_FN_Server_OnShutdown = function(): En_HP_HandleResult; stdcall;
  193. {TODO: /* Agent 回调函数 */ }
  194. HP_FN_Agent_OnPrepareConnect = function(dwConnID: HP_CONNID; SOCKET: Pointer): En_HP_HandleResult; stdcall;
  195. HP_FN_Agent_OnConnect = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
  196. HP_FN_Agent_OnHandShake = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
  197. HP_FN_Agent_OnSend = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
  198. HP_FN_Agent_OnReceive = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
  199. HP_FN_Agent_OnPullReceive = function(dwConnID: HP_CONNID; iLength: Integer): En_HP_HandleResult; stdcall;
  200. HP_FN_Agent_OnClose = function(dwConnID: HP_CONNID; enOperation: En_HP_SocketOperation; iErrorCode: Integer): En_HP_HandleResult; stdcall;
  201. HP_FN_Agent_OnShutdown = function(): En_HP_HandleResult; stdcall;
  202. {TODO: /* Client 回调函数 */ }
  203. HP_FN_Client_OnPrepareConnect = function(pClient: HP_Client; SOCKET: Pointer): En_HP_HandleResult; stdcall;
  204. HP_FN_Client_OnConnect = function(pClient: HP_Client): En_HP_HandleResult; stdcall;
  205. HP_FN_Client_OnHandShake = function(pClient: HP_Client): En_HP_HandleResult; stdcall;
  206. HP_FN_Client_OnSend = function(pClient: HP_Client; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
  207. HP_FN_Client_OnReceive = function(pClient: HP_Client; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
  208. HP_FN_Client_OnPullReceive = function(pClient: HP_Client; iLength: Integer): En_HP_HandleResult; stdcall;
  209. HP_FN_Client_OnClose = function(pClient: HP_Client; enOperation: En_HP_SocketOperation; iLength: Integer): En_HP_HandleResult; stdcall;
  210. { /****************************************************/
  211. /************** HPSocket4C.dll 导出函数 **************/ }
  212. {TODO: 创建 HP_TcpServer 对象 }
  213. function Create_HP_TcpServer(pListener: HP_TcpServerListener): HP_TcpServer; stdcall; external HPSocketDLL;
  214. {TODO: 创建 HP_HttpServer 对象 }
  215. function Create_HP_HttpServer(pListener: HP_HttpServerListener): HP_HttpServer; stdcall; external HPSocketDLL;
  216. {TODO: 创建 HP_TcpAgent 对象 }
  217. function Create_HP_TcpAgent(pListener: HP_TcpAgentListener): HP_TcpAgent; stdcall; external HPSocketDLL;
  218. {TODO: 创建 HP_TcpClient 对象 }
  219. function Create_HP_TcpClient(pListener: HP_TcpClientListener): HP_TcpClient; stdcall; external HPSocketDLL;
  220. {TODO: 创建 HP_TcpPullServer 对象 }
  221. function Create_HP_TcpPullServer(pListener: HP_TcpPullServerListener): HP_TcpPullServer; stdcall; external HPSocketDLL;
  222. {TODO: 创建 HP_TcpPullAgent 对象 }
  223. function Create_HP_TcpPullAgent(pListener: HP_TcpPullAgentListener): HP_TcpPullAgent; stdcall; external HPSocketDLL;
  224. {TODO: 创建 HP_TcpPullClient 对象}
  225. function Create_HP_TcpPullClient(pListener: HP_TcpPullClientListener): HP_TcpPullClient; stdcall; external HPSocketDLL;
  226. {TODO: 创建 HP_TcpPackServer 对象 }
  227. function Create_HP_TcpPackServer(pListener: HP_TcpServerListener): HP_TcpPackServer; stdcall; external HPSocketDLL;
  228. {TODO: 创建 HP_TcpPackAgent 对象 }
  229. function Create_HP_TcpPackAgent(pListener: HP_TcpAgentListener): HP_TcpPackAgent; stdcall; external HPSocketDLL;
  230. {TODO: 创建 HP_TcpPackClient 对象}
  231. function Create_HP_TcpPackClient(pListener: HP_TcpClientListener): HP_TcpPackClient; stdcall; external HPSocketDLL;
  232. {TODO: 创建 HP_UdpServer 对象 }
  233. function Create_HP_UdpServer(pListener: HP_UdpServerListener): HP_UdpServer; stdcall; external HPSocketDLL;
  234. {TODO: 创建 HP_UdpClient 对象 }
  235. function Create_HP_UdpClient(pListener: HP_UdpClientListener): HP_UdpClient; stdcall; external HPSocketDLL;
  236. {TODO: 创建 HP_UdpCast 对象 }
  237. function Create_HP_UdpCast(pListener: HP_UdpCastListener): HP_UdpCast; stdcall; external HPSocketDLL;
  238. {TODO: 销毁 HP_TcpServer 对象 }
  239. procedure Destroy_HP_TcpServer(pServer: HP_TcpServer); stdcall; external HPSocketDLL;
  240. {TODO: 销毁 HP_HttpServer 对象 }
  241. procedure Destroy_HP_HttpServer(pServer: HP_HttpServer); stdcall; external HPSocketDLL;
  242. {TODO: 销毁 HP_TcpAgent 对象 }
  243. procedure Destroy_HP_TcpAgent(pAgent: HP_TcpAgent); stdcall; external HPSocketDLL;
  244. {TODO: 销毁 HP_TcpClient 对象 }
  245. procedure Destroy_HP_TcpClient(pClient: HP_TcpClient); stdcall; external HPSocketDLL;
  246. {TODO: 销毁 HP_TcpPullServer 对象 }
  247. procedure Destroy_HP_TcpPullServer(pServer: HP_TcpPullServer); stdcall; external HPSocketDLL;
  248. {TODO: 销毁 HP_TcpPullAgent 对象 }
  249. procedure Destroy_HP_TcpPullAgent(pAgent: HP_TcpPullAgent); stdcall; external HPSocketDLL;
  250. {TODO: 销毁 HP_TcpPullClient 对象 }
  251. procedure Destroy_HP_TcpPullClient(pClient: HP_TcpPullClient); stdcall; external HPSocketDLL;
  252. {TODO: 销毁 HP_TcpPackServer 对象 }
  253. procedure Destroy_HP_TcpPackServer(pServer: HP_TcpPackServer); stdcall; external HPSocketDLL;
  254. {TODO: 销毁 HP_TcpPackAgent 对象 }
  255. procedure Destroy_HP_TcpPackAgent(pAgent: HP_TcpPackAgent); stdcall; external HPSocketDLL;
  256. {TODO: 销毁 HP_TcpPackClient 对象 }
  257. procedure Destroy_HP_TcpPackClient(pClient: HP_TcpPackClient); stdcall; external HPSocketDLL;
  258. {TODO: 销毁 HP_UdpServer 对象 }
  259. procedure Destroy_HP_UdpServer(pServer: HP_UdpServer); stdcall; external HPSocketDLL;
  260. {TODO: 销毁 HP_UdpClient 对象 }
  261. procedure Destroy_HP_UdpClient(pClient: HP_UdpClient); stdcall; external HPSocketDLL;
  262. {TODO: 销毁 HP_UdpCast 对象 }
  263. procedure Destroy_HP_UdpCast(pCast: HP_UdpCast); stdcall; external HPSocketDLL;
  264. {TODO: 创建 HP_TcpServerListener and HP_TcpPackServerListener 对象 }
  265. function Create_HP_TcpServerListener(): HP_TcpServerListener; stdcall; external HPSocketDLL;
  266. {TODO: 创建 HP_HttpServerListener 对象 }
  267. function Create_HP_HttpServerListener(): HP_HttpServerListener; stdcall; external HPSocketDLL;
  268. {TODO: 创建 HP_TcpAgentListener 对象 }
  269. function Create_HP_TcpAgentListener(): HP_TcpAgentListener; stdcall; external HPSocketDLL;
  270. {TODO: 创建 HP_TcpClientListener 对象 }
  271. function Create_HP_TcpClientListener(): HP_TcpClientListener; stdcall; external HPSocketDLL;
  272. {TODO: 创建 HP_TcpPullServerListener 对象 }
  273. function Create_HP_TcpPullServerListener(): HP_TcpPullServerListener; stdcall; external HPSocketDLL;
  274. {TODO: 创建 HP_TcpPullAgentListener 对象 }
  275. function Create_HP_TcpPullAgentListener(): HP_TcpPullAgentListener; stdcall; external HPSocketDLL;
  276. {TODO: 创建 HP_TcpPullClientListener 对象 }
  277. function Create_HP_TcpPullClientListener(): HP_TcpPullClientListener; stdcall; external HPSocketDLL;
  278. {TODO: 创建 HP_UdpServerListener 对象 }
  279. function Create_HP_UdpServerListener(): HP_UdpServerListener; stdcall; external HPSocketDLL;
  280. {TODO: 创建 HP_UdpClientListener 对象 }
  281. function Create_HP_UdpClientListener(): HP_UdpClientListener; stdcall; external HPSocketDLL;
  282. {TODO: 创建 HP_UdpCastListener 对象 }
  283. function Create_HP_UdpCastListener(): HP_UdpCastListener; stdcall; external HPSocketDLL;
  284. {TODO: 销毁 HP_TcpServerListener and HP_TcpPackServerListener对象 }
  285. procedure Destroy_HP_TcpServerListener(pListener: HP_TcpServerListener); stdcall; external HPSocketDLL;
  286. {TODO: 销毁 HP_HttpServerListener 对象 }
  287. procedure Destroy_HP_HttpServerListener(pListener: HP_HttpServerListener); stdcall; external HPSocketDLL;
  288. {TODO: 销毁 HP_TcpAgentListener 对象 }
  289. procedure Destroy_HP_TcpAgentListener(pListener: HP_TcpAgentListener); stdcall; external HPSocketDLL;
  290. {TODO: 销毁 HP_TcpClientListener 对象 }
  291. procedure Destroy_HP_TcpClientListener(pListener: HP_TcpClientListener); stdcall; external HPSocketDLL;
  292. {TODO: 销毁 HP_TcpPullServerListener 对象 }
  293. procedure Destroy_HP_TcpPullServerListener(pListener: HP_TcpPullServerListener); stdcall; external HPSocketDLL;
  294. {TODO: 销毁 HP_TcpPullAgentListener 对象 }
  295. procedure Destroy_HP_TcpPullAgentListener(pListener: HP_TcpPullAgentListener); stdcall; external HPSocketDLL;
  296. {TODO: 销毁 HP_TcpPullClientListener 对象 }
  297. procedure Destroy_HP_TcpPullClientListener(pListener: HP_TcpPullClientListener); stdcall; external HPSocketDLL;
  298. {TODO: 销毁 HP_UdpServerListener 对象 }
  299. procedure Destroy_HP_UdpServerListener(pListener: HP_UdpServerListener); stdcall; external HPSocketDLL;
  300. {TODO: 销毁 HP_UdpClientListener 对象 }
  301. procedure Destroy_HP_UdpClientListener(pListener: HP_UdpClientListener); stdcall; external HPSocketDLL;
  302. {TODO: 销毁 HP_UdpCastListener 对象 }
  303. procedure Destroy_HP_UdpCastListener(pListener: HP_UdpCastListener); stdcall; external HPSocketDLL;
  304. {TODO: ***************************** Server 回调函数设置方法 ***************************** }
  305. procedure HP_Set_FN_Server_OnPrepareListen(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnPrepareListen); stdcall; external HPSocketDLL;
  306. procedure HP_Set_FN_Server_OnAccept(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnAccept); stdcall; external HPSocketDLL;
  307. procedure HP_Set_FN_Server_OnHandShake(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnHandShake); stdcall; external HPSocketDLL;
  308. procedure HP_Set_FN_Server_OnSend(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnSend); stdcall; external HPSocketDLL;
  309. procedure HP_Set_FN_Server_OnReceive(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnReceive); stdcall; external HPSocketDLL;
  310. procedure HP_Set_FN_Server_OnPullReceive(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnPullReceive); stdcall; external HPSocketDLL;
  311. procedure HP_Set_FN_Server_OnClose(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnClose); stdcall; external HPSocketDLL;
  312. procedure HP_Set_FN_Server_OnShutdown(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnShutdown); stdcall; external HPSocketDLL;
  313. {TODO:****************************** Agent 回调函数设置方法 ***************************** }
  314. procedure HP_Set_FN_Agent_OnPrepareConnect(pListener: HP_AgentListener; fn: HP_FN_Agent_OnPrepareConnect); stdcall; external HPSocketDLL;
  315. procedure HP_Set_FN_Agent_OnConnect(pListener: HP_AgentListener; fn: HP_FN_Agent_OnConnect); stdcall; external HPSocketDLL;
  316. procedure HP_Set_FN_Agent_OnHandShake(pListener: HP_AgentListener; fn: HP_FN_Agent_OnHandShake); stdcall; external HPSocketDLL;
  317. procedure HP_Set_FN_Agent_OnSend(pListener: HP_AgentListener; fn: HP_FN_Agent_OnSend); stdcall; external HPSocketDLL;
  318. procedure HP_Set_FN_Agent_OnReceive(pListener: HP_AgentListener; fn: HP_FN_Agent_OnReceive); stdcall; external HPSocketDLL;
  319. procedure HP_Set_FN_Agent_OnPullReceive(pListener: HP_AgentListener; fn: HP_FN_Agent_OnPullReceive); stdcall; external HPSocketDLL;
  320. procedure HP_Set_FN_Agent_OnClose(pListener: HP_AgentListener; fn: HP_FN_Agent_OnClose); stdcall; external HPSocketDLL;
  321. procedure HP_Set_FN_Agent_OnAgentShutdown(pListener: HP_AgentListener; fn: HP_FN_Agent_OnShutdown); stdcall; external HPSocketDLL;
  322. {TODO:***************************** Client 回调函数设置方法 ***************************** }
  323. procedure HP_Set_FN_Client_OnPrepareConnect(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnPrepareConnect); stdcall; external HPSocketDLL;
  324. procedure HP_Set_FN_Client_OnConnect(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnConnect); stdcall; external HPSocketDLL;
  325. procedure HP_Set_FN_Client_OnHandShake(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnHandShake); stdcall; external HPSocketDLL;
  326. procedure HP_Set_FN_Client_OnSend(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnSend); stdcall; external HPSocketDLL;
  327. procedure HP_Set_FN_Client_OnReceive(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnReceive); stdcall; external HPSocketDLL;
  328. procedure HP_Set_FN_Client_OnPullReceive(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnPullReceive); stdcall; external HPSocketDLL;
  329. procedure HP_Set_FN_Client_OnClose(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnClose); stdcall; external HPSocketDLL;
  330. { /***************************** Server 操作方法 *****************************/ }
  331. { TODO:
  332. * 名称:启动通信组件
  333. * 描述:启动服务端通信组件,启动完成后可开始接收客户端连接并收发数据
  334. *
  335. * 参数: pszBindAddress -- 监听地址
  336. * usPort -- 监听端口
  337. * 返回值: TRUE -- 成功
  338. * FALSE -- 失败,可通过 GetLastError() 获取错误代码 }
  339. function HP_Server_Start(pServer: HP_Server; pszBindAddress: WideString; usPort: Word): BOOL; stdcall; external HPSocketDLL;
  340. { TODO:
  341. * 名称:关闭通信组件
  342. * 描述:关闭服务端通信组件,关闭完成后断开所有客户端连接并释放所有资源
  343. *
  344. * 参数:
  345. * 返回值: TRUE -- 成功
  346. * FALSE -- 失败,可通过 GetLastError() 获取错误代码 }
  347. function HP_Server_Stop(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
  348. { TODO:
  349. * 名称:发送数据
  350. * 描述:用户通过该方法向指定客户端发送数据
  351. *
  352. * 参数:dwConnID -- 连接 ID
  353. * pBuffer -- 发送数据缓冲区
  354. * iLength -- 发送数据长度
  355. * 返回值: TRUE -- 成功
  356. * FALSE -- 失败 }
  357. { Private declarations }
  358. function HP_Server_Send(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer): BOOL;
  359. stdcall; external HPSocketDLL;
  360. { TODO:
  361. * 名称:发送数据
  362. * 描述:向指定连接发送数据
  363. *
  364. * 参数:dwConnID -- 连接 ID
  365. * pBuffer -- 发送缓冲区
  366. * iLength -- 发送缓冲区长度
  367. * iOffset -- 发送缓冲区指针偏移量
  368. * 返回值: TRUE -- 成功
  369. * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码 }
  370. function HP_Server_SendPart(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
  371. stdcall; external HPSocketDLL;
  372. { TODO:
  373. * 名称:发送多组数据
  374. * 描述:向指定连接发送多组数据
  375. * TCP - 顺序发送所有数据包
  376. * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
  377. *
  378. * 参数: dwConnID -- 连接 ID
  379. * pBuffers -- 发送缓冲区数组
  380. * iCount -- 发送缓冲区数目
  381. * 返回值: TRUE -- 成功
  382. * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码 }
  383. function HP_Server_SendPackets(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffers: WSABUFArray; iCount: Integer): BOOL;
  384. stdcall; external HPSocketDLL;
  385. { TODO:
  386. * 名称:断开连接
  387. * 描述:断开与某个客户端的连接
  388. *
  389. * 参数: dwConnID -- 连接 ID
  390. * bForce -- 是否强制断开连接
  391. * 返回值: TRUE -- 成功
  392. * FALSE -- 失败 }
  393. function HP_Server_Disconnect(pServer: HP_Server; dwConnID: HP_CONNID; bForce: BOOL): BOOL;
  394. stdcall; external HPSocketDLL;
  395. { TODO:
  396. * 名称:断开超时连接
  397. * 描述:断开超过指定时长的连接
  398. *
  399. * 参数: dwPeriod -- 时长(毫秒)
  400. * bForce -- 是否强制断开连接
  401. * 返回值: TRUE -- 成功
  402. * FALSE -- 失败 }
  403. function HP_Server_DisconnectLongConnections(pServer: HP_Server; dwPeriod: LongWord; bForce: BOOL): BOOL;
  404. stdcall; external HPSocketDLL;
  405. { TODO:
  406. * 名称:断开静默连接
  407. * 描述:断开超过指定时长的静默连接
  408. *
  409. * 参数:dwPeriod -- 时长(毫秒)
  410. * bForce -- 是否强制断开连接
  411. * 返回值: TRUE -- 成功
  412. * FALSE -- 失败 }
  413. function HP_Server_DisconnectSilenceConnections(pServer: HP_Server; dwPeriod: LongWord; bForce: BOOL): BOOL;
  414. stdcall; external HPSocketDLL;
  415. {***************************** Server 属性访问方法 *****************************/ }
  416. { TODO:
  417. * 名称:设置连接的附加数据
  418. * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  419. *
  420. * 参数: dwConnID -- 连接 ID
  421. * pv -- 数据
  422. * 返回值: TRUE -- 成功
  423. * FALSE -- 失败(无效的连接 ID) }
  424. function HP_Server_SetConnectionExtra(pServer: HP_Server; dwConnID: HP_CONNID; pExtra: Pointer): BOOL;
  425. stdcall; external HPSocketDLL;
  426. { TODO:
  427. * 名称:获取连接的附加数据
  428. * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  429. *
  430. * 参数: dwConnID -- 连接 ID
  431. * ppv -- 数据指针
  432. * 返回值: TRUE -- 成功
  433. * FALSE -- 失败(无效的连接 ID) }
  434. function HP_Server_GetConnectionExtra(pServer: HP_Server; dwConnID: HP_CONNID; ppExtra: Pointer): BOOL;
  435. stdcall; external HPSocketDLL;
  436. { TODO: 检查通信组件是否已启动 */ }
  437. function HP_Server_HasStarted(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
  438. { TODO: 查看通信组件当前状态 */ }
  439. function HP_Server_GetState(pServer: HP_Server): En_HP_ServiceState; stdcall; external HPSocketDLL;
  440. { TODO: 获取最近一次失败操作的错误代码 */ }
  441. function HP_Server_GetLastError(pServer: HP_Server): En_HP_SocketError; stdcall; external HPSocketDLL;
  442. { TODO: 获取最近一次失败操作的错误描述 */ }
  443. function HP_Server_GetLastErrorDesc(pServer: HP_Server): PWideChar; stdcall; external HPSocketDLL;
  444. { TODO: 获取连接中未发出数据的长度 */ }
  445. function HP_Server_GetPendingDataLength(pServer: HP_Server; dwConnID: HP_CONNID; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
  446. { TODO: 获取客户端连接数 */ }
  447. function HP_Server_GetConnectionCount(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
  448. { TODO: 获取所有连接的 CONNID */ }
  449. function HP_Server_GetAllConnectionIDs(pServer: HP_Server; pIDs: HP_CONNIDArray; pdwCount: PLongint): BOOL; stdcall; external HPSocketDLL;
  450. { TODO: 获取某个客户端连接时长(毫秒) */ }
  451. function HP_Server_GetConnectPeriod(pServer: HP_Server; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
  452. { TODO: 获取某个连接静默时间(毫秒) */ }
  453. function HP_Server_GetSilencePeriod(pServer: HP_Server; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
  454. { TODO: 获取监听 Socket 的地址信息 */ }
  455. function HP_Server_GetListenAddress(pServer: HP_Server; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
  456. { TODO: 获取某个连接的远程地址信息 */ }
  457. function HP_Server_GetRemoteAddress(pServer: HP_Server; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
  458. { TODO: 设置数据发送策略 */ }
  459. procedure HP_Server_SetSendPolicy(pServer: HP_Server; enSendPolicy: En_HP_SendPolicy); stdcall; external HPSocketDLL;
  460. { TODO: 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用) */ }
  461. procedure HP_Server_SetFreeSocketObjLockTime(pServer: HP_Server; dwFreeSocketObjLockTime: LongInt); stdcall; external HPSocketDLL;
  462. { TODO: 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2) */ }
  463. procedure HP_Server_SetFreeSocketObjPool(pServer: HP_Server; dwFreeSocketObjPool: LongInt); stdcall; external HPSocketDLL;
  464. { TODO: 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍) */ }
  465. procedure HP_Server_SetFreeBufferObjPool(pServer: HP_Server; dwFreeBufferObjPool: LongInt); stdcall; external HPSocketDLL;
  466. { TODO: 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍) */ }
  467. procedure HP_Server_SetFreeSocketObjHold(pServer: HP_Server; dwFreeSocketObjHold: LongInt); stdcall; external HPSocketDLL;
  468. { TODO: 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
  469. procedure HP_Server_SetFreeBufferObjHold(pServer: HP_Server; dwFreeBufferObjHold: LongInt); stdcall; external HPSocketDLL;
  470. { TODO: 设置工作线程数量(通常设置为 2 * CPU + 2) */ }
  471. procedure HP_Server_SetWorkerThreadCount(pServer: HP_Server; dwWorkerThreadCount: LongInt); stdcall; external HPSocketDLL;
  472. { TODO: 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE) */ }
  473. procedure HP_Server_SetMarkSilence(pServer: HP_Server; bMarkSilence: BOOL); stdcall; external HPSocketDLL;
  474. { TODO: 获取数据发送策略 */ }
  475. function HP_Server_GetSendPolicy(pServer: HP_Server): En_HP_SendPolicy; stdcall; external HPSocketDLL;
  476. { TODO: 获取 Socket 缓存对象锁定时间 */ }
  477. function HP_Server_GetFreeSocketObjLockTime(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
  478. { TODO: 获取 Socket 缓存池大小 */ }
  479. function HP_Server_GetFreeSocketObjPool(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
  480. { TODO: 获取内存块缓存池大小 */ }
  481. function HP_Server_GetFreeBufferObjPool(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
  482. { TODO: 获取 Socket 缓存池回收阀值 */ }
  483. function HP_Server_GetFreeSocketObjHold(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
  484. { TODO: 获取内存块缓存池回收阀值 */ }
  485. function HP_Server_GetFreeBufferObjHold(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
  486. { TODO: 获取工作线程数量 */ }
  487. function HP_Server_GetWorkerThreadCount(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
  488. { TODO: 检测是否标记静默时间 */ }
  489. function HP_Server_IsMarkSilence(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
  490. { /******************************* TCP Server 操作方法 *******************************/ }
  491. { TODO:
  492. * 名称:发送小文件
  493. * 描述:向指定连接发送 4096 KB 以下的小文件
  494. *
  495. * 参数: dwConnID -- 连接 ID
  496. * lpszFileName -- 文件路径
  497. * pHead -- 头部附加数据
  498. * pTail -- 尾部附加数据
  499. * 返回值: TRUE -- 成功
  500. * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
  501. */ }
  502. function HP_TcpServer_SendSmallFile(pServer: HP_Server; dwConnID: HP_CONNID;
  503. lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
  504. stdcall; external HPSocketDLL;
  505. { /***************************** TCP Server 属性访问方法 *****************************/ }
  506. { TODO: 设置监听 Socket 的等候队列大小(根据并发连接数量调整设置) */ }
  507. procedure HP_TcpServer_SetSocketListenQueue(pServer: HP_TcpServer; dwSocketListenQueue: LongInt); stdcall; external HPSocketDLL;
  508. { TODO: 设置 Accept 预投递数量(根据负载调整设置,Accept 预投递数量越大则支持的并发连接请求越多) */ }
  509. procedure HP_TcpServer_SetAcceptSocketCount(pServer: HP_TcpServer; dwAcceptSocketCount: LongInt); stdcall; external HPSocketDLL;
  510. { TODO: 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数) */ }
  511. procedure HP_TcpServer_SetSocketBufferSize(pServer: HP_TcpServer; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
  512. { TODO: 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
  513. procedure HP_TcpServer_SetKeepAliveTime(pServer: HP_TcpServer; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
  514. { TODO: 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
  515. procedure HP_TcpServer_SetKeepAliveInterval(pServer: HP_TcpServer; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
  516. { TODO: 获取 Accept 预投递数量 */ }
  517. function HP_TcpServer_GetAcceptSocketCount(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
  518. { TODO: 获取通信数据缓冲区大小 */ }
  519. function HP_TcpServer_GetSocketBufferSize(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
  520. { TODO: 获取监听 Socket 的等候队列大小 */ }
  521. function HP_TcpServer_GetSocketListenQueue(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
  522. { TODO: 获取心跳检查次数 */ }
  523. function HP_TcpServer_GetKeepAliveTime(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
  524. { TODO: 获取心跳检查间隔 */ }
  525. function HP_TcpServer_GetKeepAliveInterval(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
  526. { /***************************** UDP Server 属性访问方法 *****************************/ }
  527. { TODO: 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */ }
  528. procedure HP_UdpServer_SetMaxDatagramSize(pServer: HP_UdpServer; dwMaxDatagramSize: LongInt); stdcall; external HPSocketDLL;
  529. { TODO: 获取数据报文最大长度 */ }
  530. function HP_UdpServer_GetMaxDatagramSize(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
  531. { TODO: 设置 Receive 预投递数量(根据负载调整设置,Receive 预投递数量越大则丢包概率越小) */ }
  532. procedure HP_UdpServer_SetPostReceiveCount(pServer: HP_UdpServer; dwPostReceiveCount: LongInt); stdcall; external HPSocketDLL;
  533. { TODO: 获取 Receive 预投递数量 */ }
  534. function HP_UdpServer_GetPostReceiveCount(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
  535. { TODO: 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线) */ }
  536. procedure HP_UdpServer_SetDetectAttempts(pServer: HP_UdpServer; dwDetectAttempts: LongInt); stdcall; external HPSocketDLL;
  537. { TODO: 设置监测包发送间隔(秒,0 不发送监测包) */ }
  538. procedure HP_UdpServer_SetDetectInterval(pServer: HP_UdpServer; dwDetectInterval: LongInt); stdcall; external HPSocketDLL;
  539. { TODO: 获取心跳检查次数 */ }
  540. function HP_UdpServer_GetDetectAttempts(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
  541. { TODO: 获取心跳检查间隔 */ }
  542. function HP_UdpServer_GetDetectInterval(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
  543. { ***************************** Agent 操作方法 ***************************** }
  544. { TODO:
  545. * 名称:启动通信组件
  546. * 描述:启动通信代理组件,启动完成后可开始连接远程服务器
  547. *
  548. * 参数: pszBindAddress -- 监听地址
  549. * bAsyncConnect -- 是否采用异步 Connect
  550. * 返回值: TRUE -- 成功
  551. * FALSE -- 失败,可通过 GetLastError() 获取错误代码
  552. */ }
  553. function HP_Agent_Start(pAgent: HP_Agent; pszBindAddress: PWideChar; bAsyncConnect: BOOL): BOOL; stdcall; external HPSocketDLL;
  554. { TODO:
  555. * 名称:关闭通信组件
  556. * 描述:关闭通信组件,关闭完成后断开所有连接并释放所有资源
  557. *
  558. * 参数:
  559. * 返回值: TRUE -- 成功
  560. * FALSE -- 失败,可通过 GetLastError() 获取错误代码
  561. */ }
  562. function HP_Agent_Stop(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
  563. { TODO:
  564. * 名称:连接服务器
  565. * 描述:连接服务器,连接成功后 IAgentListener 会接收到 OnConnect() 事件
  566. *
  567. * 参数: pszRemoteAddress -- 服务端地址
  568. * usPort -- 服务端端口
  569. * pdwConnID -- 连接 ID(默认:nullptr,不获取连接 ID)
  570. * 返回值: TRUE -- 成功
  571. * FALSE -- 失败,可通过函数 SYS_GetLastError() 获取 Windows 错误代码
  572. */ }
  573. function HP_Agent_Connect(pAgent: HP_Agent; pszRemoteAddress: PWideChar; usPort: Word; pdwConnID: PHP_CONNID): BOOL;
  574. stdcall; external HPSocketDLL;
  575. { TODO:
  576. * 名称:发送数据
  577. * 描述:向指定连接发送数据
  578. *
  579. * 参数: dwConnID -- 连接 ID
  580. * pBuffer -- 发送缓冲区
  581. * iLength -- 发送缓冲区长度
  582. * 返回值: TRUE -- 成功
  583. * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
  584. */ }
  585. function HP_Agent_Send(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer): BOOL;
  586. stdcall; external HPSocketDLL;
  587. { TODO:
  588. * 名称:发送数据
  589. * 描述:向指定连接发送数据
  590. *
  591. * 参数: dwConnID -- 连接 ID
  592. * pBuffer -- 发送缓冲区
  593. * iLength -- 发送缓冲区长度
  594. * iOffset -- 发送缓冲区指针偏移量
  595. * 返回值: TRUE -- 成功
  596. * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
  597. */ }
  598. function HP_Agent_SendPart(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
  599. stdcall; external HPSocketDLL;
  600. { TODO:
  601. * 名称:发送多组数据
  602. * 描述:向指定连接发送多组数据
  603. * TCP - 顺序发送所有数据包
  604. * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
  605. *
  606. * 参数: dwConnID -- 连接 ID
  607. * pBuffers -- 发送缓冲区数组
  608. * iCount -- 发送缓冲区数目
  609. * 返回值: TRUE -- 成功
  610. * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
  611. */ }
  612. function HP_Agent_SendPackets(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffers: WSABUFArray; iCount: Integer): BOOL;
  613. stdcall; external HPSocketDLL;
  614. { TODO:
  615. * 名称:断开连接
  616. * 描述:断开某个连接
  617. *
  618. * 参数: dwConnID -- 连接 ID
  619. * bForce -- 是否强制断开连接
  620. * 返回值: TRUE -- 成功
  621. * FALSE -- 失败
  622. */ }
  623. function HP_Agent_Disconnect(pAgent: HP_Agent; dwConnID: HP_CONNID; bForce: BOOL): BOOL;
  624. stdcall; external HPSocketDLL;
  625. { TODO:
  626. * 名称:断开超时连接
  627. * 描述:断开超过指定时长的连接
  628. *
  629. * 参数: dwPeriod -- 时长(毫秒)
  630. * bForce -- 是否强制断开连接
  631. * 返回值: TRUE -- 成功
  632. * FALSE -- 失败
  633. */ }
  634. function HP_Agent_DisconnectLongConnections(pAgent: HP_Agent; dwPeriod: LongInt; bForce: BOOL): BOOL;
  635. stdcall; external HPSocketDLL;
  636. { TODO:
  637. * 名称:断开静默连接
  638. * 描述:断开超过指定时长的静默连接
  639. *
  640. * 参数: dwPeriod -- 时长(毫秒)
  641. * bForce -- 是否强制断开连接
  642. * 返回值: TRUE -- 成功
  643. * FALSE -- 失败
  644. */ }
  645. function HP_Agent_DisconnectSilenceConnections(pAgent: HP_Agent; dwPeriod: LongInt; bForce: BOOL): BOOL;
  646. stdcall; external HPSocketDLL;
  647. { /******************************************************************************/
  648. /***************************** Agent 属性访问方法 *****************************/ }
  649. { TODO
  650. * 名称:设置连接的附加数据
  651. * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  652. *
  653. * 参数: dwConnID -- 连接 ID
  654. * pv -- 数据
  655. * 返回值: TRUE -- 成功
  656. * FALSE -- 失败(无效的连接 ID)
  657. */ }
  658. function HP_Agent_SetConnectionExtra(pAgent: HP_Agent; dwConnID: HP_CONNID; pExtra: Pointer): BOOL;
  659. stdcall; external HPSocketDLL;
  660. { TODO
  661. * 名称:获取连接的附加数据
  662. * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
  663. *
  664. * 参数: dwConnID -- 连接 ID
  665. * ppv -- 数据指针
  666. * 返回值: TRUE -- 成功
  667. * FALSE -- 失败(无效的连接 ID)
  668. */ }
  669. function HP_Agent_GetConnectionExtra(pAgent: HP_Agent; dwConnID: HP_CONNID;
  670. ppExtra: Pointer): BOOL; stdcall; external HPSocketDLL;
  671. {TODO 检查通信组件是否已启动 */ }
  672. function HP_Agent_HasStarted(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
  673. {TODO 查看通信组件当前状态 */ }
  674. function HP_Agent_GetState(pAgent: HP_Agent): En_HP_ServiceState; stdcall; external HPSocketDLL;
  675. {TODO 获取连接数 */ }
  676. function HP_Agent_GetConnectionCount(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
  677. { TODO 获取所有连接的 CONNID */ }
  678. function HP_Agent_GetAllConnectionIDs(pAgent: HP_Agent; pIDs: HP_CONNIDArray; pdwCount: PLongint): BOOL; stdcall; external HPSocketDLL;
  679. {TODO 获取某个连接时长(毫秒) */ }
  680. function HP_Agent_GetConnectPeriod(pAgent: HP_Agent; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
  681. {TODO 获取某个连接静默时间(毫秒) */ }
  682. function HP_Agent_GetSilencePeriod(pAgent: HP_Agent; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
  683. {TODO 获取某个连接的本地地址信息 */ }
  684. function HP_Agent_GetLocalAddress(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
  685. {TODO 获取某个连接的远程地址信息 */ }
  686. function HP_Agent_GetRemoteAddress(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
  687. {TODO 获取最近一次失败操作的错误代码 */ }
  688. function HP_Agent_GetLastError(pAgent: HP_Agent): En_HP_SocketError; stdcall; external HPSocketDLL;
  689. {TODO 获取最近一次失败操作的错误描述 */ }
  690. function HP_Agent_GetLastErrorDesc(pAgent: HP_Agent): PWideChar; stdcall; external HPSocketDLL;
  691. {TODO 获取连接中未发出数据的长度 */ }
  692. function HP_Agent_GetPendingDataLength(pAgent: HP_Agent; dwConnID: HP_CONNID; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
  693. {TODO 设置数据发送策略 */ }
  694. procedure HP_Agent_SetSendPolicy(pAgent: HP_Agent; enSendPolicy: En_HP_SendPolicy); stdcall; external HPSocketDLL;
  695. {TODO 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用) */ }
  696. procedure HP_Agent_SetFreeSocketObjLockTime(pAgent: HP_Agent; dwFreeSocketObjLockTime: LongInt); stdcall; external HPSocketDLL;
  697. {TODO 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2) */ }
  698. procedure HP_Agent_SetFreeSocketObjPool(pAgent: HP_Agent; dwFreeSocketObjPool: LongInt); stdcall; external HPSocketDLL;
  699. {TODO 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍) */ }
  700. procedure HP_Agent_SetFreeBufferObjPool(pAgent: HP_Agent; dwFreeBufferObjPool: LongInt); stdcall; external HPSocketDLL;
  701. {TODO 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍) */ }
  702. procedure HP_Agent_SetFreeSocketObjHold(pAgent: HP_Agent; dwFreeSocketObjHold: LongInt); stdcall; external HPSocketDLL;
  703. {TODO 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
  704. procedure HP_Agent_SetFreeBufferObjHold(pAgent: HP_Agent; dwFreeBufferObjHold: LongInt); stdcall; external HPSocketDLL;
  705. {TODO 设置工作线程数量(通常设置为 2 * CPU + 2) */ }
  706. procedure HP_Agent_SetWorkerThreadCount(pAgent: HP_Agent; dwWorkerThreadCount: LongInt); stdcall; external HPSocketDLL;
  707. {TODO 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE) */ }
  708. procedure HP_Agent_SetMarkSilence(pAgent: HP_Agent; bMarkSilence: BOOL); stdcall; external HPSocketDLL;
  709. {TODO 获取数据发送策略 */ }
  710. function HP_Agent_GetSendPolicy(pAgent: HP_Agent): En_HP_SendPolicy; stdcall; external HPSocketDLL;
  711. {TODO 获取 Socket 缓存对象锁定时间 */ }
  712. function HP_Agent_GetFreeSocketObjLockTime(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
  713. {TODO 获取 Socket 缓存池大小 */ }
  714. function HP_Agent_GetFreeSocketObjPool(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
  715. {TODO 获取内存块缓存池大小 */ }
  716. function HP_Agent_GetFreeBufferObjPool(HpAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
  717. {TODO 获取 Socket 缓存池回收阀值 */ }
  718. function HP_Agent_GetFreeSocketObjHold(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
  719. {TODO 获取内存块缓存池回收阀值 */ }
  720. function HP_Agent_GetFreeBufferObjHold(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
  721. {TODO 获取工作线程数量 */ }
  722. function HP_Agent_GetWorkerThreadCount(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
  723. {TODO 检测是否标记静默时间 */ }
  724. function HP_Agent_IsMarkSilence(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
  725. { ******************************* TCP Agent 操作方法 ******************************* }
  726. {TODO
  727. * 名称:发送小文件
  728. * 描述:向指定连接发送 4096 KB 以下的小文件
  729. *
  730. * 参数: dwConnID -- 连接 ID
  731. * lpszFileName -- 文件路径
  732. * pHead -- 头部附加数据
  733. * pTail -- 尾部附加数据
  734. * 返回值: TRUE -- 成功
  735. * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
  736. */ }
  737. function HP_TcpAgent_SendSmallFile(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
  738. stdcall; external HPSocketDLL;
  739. { ***************************** TCP Agent 属性访问方法 *****************************/ }
  740. { TODO 设置是否启用地址重用机制(默认:不启用) */ }
  741. procedure HP_TcpAgent_SetReuseAddress(pAgent: HP_TcpAgent; bReuseAddress: BOOL); stdcall; external HPSocketDLL;
  742. { TODO 检测是否启用地址重用机制 */ }
  743. function HP_TcpAgent_IsReuseAddress(pAgent: HP_TcpAgent): BOOL; stdcall; external HPSocketDLL;
  744. { TODO 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数) */ }
  745. procedure HP_TcpAgent_SetSocketBufferSize(pAgent: HP_TcpAgent; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
  746. { TODO 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
  747. procedure HP_TcpAgent_SetKeepAliveTime(pAgent: HP_TcpAgent; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
  748. { TODO 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
  749. procedure HP_TcpAgent_SetKeepAliveInterval(pAgent: HP_TcpAgent; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
  750. { TODO 获取通信数据缓冲区大小 */ }
  751. function HP_TcpAgent_GetSocketBufferSize(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
  752. { TODO 获取心跳检查次数 */ }
  753. function HP_TcpAgent_GetKeepAliveTime(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
  754. { TODO 获取心跳检查间隔 */ }
  755. function HP_TcpAgent_GetKeepAliveInterval(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
  756. { /***************************** Client 组件操作方法 *****************************/ }
  757. { TODO
  758. * 名称:启动通信组件
  759. * 描述:启动客户端通信组件并连接服务端,启动完成后可开始收发数据
  760. *
  761. * 参数: pszRemoteAddress -- 服务端地址
  762. * usPort -- 服务端端口
  763. * bAsyncConnect -- 是否采用异步 Connect
  764. * 返回值: TRUE -- 成功
  765. * FALSE -- 失败,可通过 GetLastError() 获取错误代码
  766. */ }
  767. function HP_Client_Start(pClient: HP_Client; pszRemoteAddress: PWideChar; usPort: Word; bAsyncConnect: BOOL): BOOL;
  768. stdcall; external HPSocketDLL;
  769. { TODO
  770. * 名称:关闭通信组件
  771. * 描述:关闭客户端通信组件,关闭完成后断开与服务端的连接并释放所有资源
  772. *
  773. * 参数:
  774. * 返回值: TRUE -- 成功
  775. * FALSE -- 失败,可通过 GetLastError() 获取错误代码
  776. */ }
  777. function HP_Client_Stop(pClient: HP_Client): BOOL; stdcall; external HPSocketDLL;
  778. { TODO
  779. * 名称:发送数据
  780. * 描述:向服务端发送数据
  781. *
  782. * 参数: pBuffer -- 发送缓冲区
  783. * iLength -- 发送缓冲区长度
  784. * 返回值: TRUE -- 成功
  785. * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
  786. */ }
  787. function HP_Client_Send(pClient: HP_Client; const pBuffer: Pointer; iLength: Integer): BOOL; stdcall; external HPSocketDLL;
  788. { TODO
  789. * 名称:发送数据
  790. * 描述:向服务端发送数据
  791. *
  792. * 参数: pBuffer -- 发送缓冲区
  793. * iLength -- 发送缓冲区长度
  794. * iOffset -- 发送缓冲区指针偏移量
  795. * 返回值: TRUE -- 成功
  796. * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
  797. */ }
  798. function HP_Client_SendPart(pClient: HP_Client; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
  799. stdcall; external HPSocketDLL;
  800. { TODO
  801. * 名称:发送多组数据
  802. * 描述:向服务端发送多组数据
  803. * TCP - 顺序发送所有数据包
  804. * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
  805. *
  806. * 参数: pBuffers -- 发送缓冲区数组
  807. * iCount -- 发送缓冲区数目
  808. * 返回值: TRUE -- 成功
  809. * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
  810. */ }
  811. function HP_Client_SendPackets(pClient: HP_Client; const pBuffers: WSABUFArray; iCount: Integer): BOOL; stdcall; external HPSocketDLL;
  812. { /******************************************************************************/
  813. /***************************** Client 属性访问方法 *****************************/ }
  814. { TODO 设置连接的附加数据 */ }
  815. procedure HP_Client_SetExtra(pClient: HP_Client; pExtra: Pointer); stdcall; external HPSocketDLL;
  816. { TODO 获取连接的附加数据 */ }
  817. function HP_Client_GetExtra(pClient: HP_Client): Pointer; stdcall; external HPSocketDLL;
  818. { TODO 检查通信组件是否已启动 */ }
  819. function HP_Client_HasStarted(pClient: HP_Client): BOOL; stdcall; external HPSocketDLL;
  820. { TODO 查看通信组件当前状态 */ }
  821. function HP_Client_GetState(pClient: HP_Client): En_HP_ServiceState; stdcall; external HPSocketDLL;
  822. { TODO 获取最近一次失败操作的错误代码 */ }
  823. function HP_Client_GetLastError(pClient: HP_Client): En_HP_SocketError; stdcall; external HPSocketDLL;
  824. { TODO 获取最近一次失败操作的错误描述 */ }
  825. function HP_Client_GetLastErrorDesc(pClient: HP_Client): PWideChar; stdcall; external HPSocketDLL;
  826. { TODO 获取该组件对象的连接 ID */ }
  827. function HP_Client_GetConnectionID(pClient: HP_Client): HP_CONNID; stdcall; external HPSocketDLL;
  828. { TODO 获取 Client Socket 的地址信息 */ }
  829. function HP_Client_GetLocalAddress(pClient: HP_Client; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL;
  830. stdcall; external HPSocketDLL;
  831. { TODO 获取连接中未发出数据的长度 */ }
  832. function HP_Client_GetPendingDataLength(pClient: HP_Client; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
  833. { TODO 设置内存块缓存池大小(通常设置为 -> PUSH 模型:5 - 10;PULL 模型:10 - 20 ) */ }
  834. procedure HP_Client_SetFreeBufferPoolSize(pClient: HP_Client; dwFreeBufferPoolSize: LongInt); stdcall; external HPSocketDLL;
  835. { TODO 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
  836. procedure HP_Client_SetFreeBufferPoolHold(pClient: HP_Client; dwFreeBufferPoolHold: LongInt); stdcall; external HPSocketDLL;
  837. { TODO 获取内存块缓存池大小 */ }
  838. function HP_Client_GetFreeBufferPoolSize(pClient: HP_Client): LongInt; stdcall; external HPSocketDLL;
  839. { TODO 获取内存块缓存池回收阀值 */ }
  840. function HP_Client_GetFreeBufferPoolHold(pClient: HP_Client): LongInt; stdcall; external HPSocketDLL;
  841. { /**********************************************************************************/
  842. /******************************* TCP Client 操作方法 *******************************/ }
  843. { /*
  844. * 名称:发送小文件
  845. * 描述:向服务端发送 4096 KB 以下的小文件
  846. *
  847. * 参数: lpszFileName -- 文件路径
  848. * pHead -- 头部附加数据
  849. * pTail -- 尾部附加数据
  850. * 返回值: TRUE -- 成功
  851. * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
  852. */ }
  853. function HP_TcpClient_SendSmallFile(pClient: HP_Client; lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
  854. stdcall; external HPSocketDLL;
  855. { /**********************************************************************************/
  856. /***************************** TCP Client 属性访问方法 *****************************/ }
  857. { TODO 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为:(N * 1024) - sizeof(TBufferObj)) */ }
  858. procedure HP_TcpClient_SetSocketBufferSize(pClient: HP_TcpClient; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
  859. { TODO 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
  860. procedure HP_TcpClient_SetKeepAliveTime(pClient: HP_TcpClient; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
  861. { TODO 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
  862. procedure HP_TcpClient_SetKeepAliveInterval(pClient: HP_TcpClient; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
  863. { TODO 获取通信数据缓冲区大小 */ }
  864. function HP_TcpClient_GetSocketBufferSize(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
  865. { TODO 获取心跳检查次数 */ }
  866. function HP_TcpClient_GetKeepAliveTime(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
  867. { TODO 获取心跳检查间隔 */ }
  868. function HP_TcpClient_GetKeepAliveInterval(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
  869. {***************************** UDP Client 属性访问方法 *****************************/ }
  870. { TODO 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */ }
  871. procedure HP_UdpClient_SetMaxDatagramSize(pClient: HP_UdpClient; dwMaxDatagramSize: LongInt); stdcall; external HPSocketDLL;
  872. { TODO 获取数据报文最大长度 */ }
  873. function HP_UdpClient_GetMaxDatagramSize(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
  874. { TODO 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线) */ }
  875. procedure HP_UdpClient_SetDetectAttempts(pClient: HP_UdpClient; dwDetectAttempts: LongInt); stdcall; external HPSocketDLL;
  876. { TODO 设置监测包发送间隔(秒,0 不发送监测包) */ }
  877. procedure HP_UdpClient_SetDetectInterval(pClient: HP_UdpClient; dwDetectInterval: LongInt); stdcall; external HPSocketDLL;
  878. { TODO 获取心跳检查次数 */ }
  879. function HP_UdpClient_GetDetectAttempts(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
  880. { TODO 获取心跳检查间隔 */ }
  881. function HP_UdpClient_GetDetectInterval(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
  882. { ***************************** UDP Cast 属性访问方法 *****************************/ }
  883. {TODO 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */}
  884. procedure HP_UdpCast_SetMaxDatagramSize(pCast: HP_UdpCast; dwMaxDatagramSize: LongInt); stdcall; external HPSocketdll;
  885. {TODO 获取数据报文最大长度 */ }
  886. function HP_UdpCast_GetMaxDatagramSize(pCast: HP_UdpCast): LongInt; stdcall; external HPSocketdll;
  887. {TODO 获取当前数据报的远程地址信息(通常在 OnReceive 事件中调用) */ }
  888. function HP_UdpCast_GetRemoteAddress(pCast: HP_UdpCast; lpszAddress: PWideChar; piAddresslen: PInteger; pusPort: PUShort): BOOL;
  889. stdcall; external HPSocketDLL;
  890. {TODO 设置绑定地址 */ }
  891. procedure HP_UdpCast_SetBindAdddress(pCast: HP_UdpCast; pszBindAddress: PWideChar); stdcall; external HPSocketDll;
  892. {TODO 获取绑定地址 */ }
  893. function HP_UdpCast_GetBindAdddress(pCast: HP_UdpCast): WideChar; stdcall external HPSocketDll;
  894. {TODO 设置是否启用地址重用机制(默认:不启用) */ }
  895. procedure HP_UdpCast_SetReuseAddress(pCast: HP_UdpCast; bReuseAddress: BOOL); stdcall; external HPSocketDll;
  896. {TODO 检测是否启用地址重用机制 */ }
  897. function HP_UdpCast_IsReuseAddress(pCast: HP_UdpCast): BOOL; stdcall; external HPSocketDll;
  898. {TODO 设置传播模式(组播或广播) */ }
  899. procedure HP_UdpCast_SetCastMode(pCast: HP_UdpCast; enCastMode: En_HP_CastMode); stdcall; external HPSocketDll;
  900. {TODO 获取传播模式 */ }
  901. function HP_UdpCast_GetCastMode(pCast: HP_UdpCast): En_HP_CastMode; stdcall; external HPSocketDll;
  902. {TODO 设置组播报文的 TTL(0 - 255) */ }
  903. procedure HP_UdpCast_SetMultiCastTtl(PChar: HP_UdpCast; iMCTtl: LongInt); stdcall; external HPSocketDll;
  904. {TODO 获取组播报文的 TTL */ }
  905. function HP_UdpCast_GetMultiCastTtl(PChar: HP_UdpCast): LongInt; stdcall; external HPSocketDll;
  906. {TODO 设置是否启用组播环路(TRUE or FALSE) */ }
  907. procedure HP_UdpCast_SetMultiCastLoop(PChar: HP_UdpCast; bMCLoop: BOOL); stdcall; external HPSocketDll;
  908. {TODO 检测是否启用组播环路 */ }
  909. function HP_UdpCast_IsMultiCastLoop(PChar: HP_UdpCast): BOOL; stdcall; external HPSocketDll;
  910. { **************************** TCP Pull Server 组件操作方法 *****************************/ }
  911. {TODO
  912. * 名称:抓取数据
  913. * 描述:用户通过该方法从 Socket 组件中抓取数据
  914. *
  915. * 参数: dwConnID -- 连接 ID
  916. * pBuffer -- 数据抓取缓冲区
  917. * iLength -- 抓取数据长度
  918. * 返回值: En_HP_FetchResult
  919. */ }
  920. function HP_TcpPullServer_Fetch(pServer: HP_TcpPullServer; dwConnID: HP_CONNID; pData: Pointer; iLength: Integer): En_HP_FetchResult;
  921. stdcall; external HPSocketDLL;
  922. { TODO
  923. * 名称:窥探数据(不会移除缓冲区数据)
  924. * 描述:用户通过该方法从 Socket 组件中窥探数据
  925. *
  926. * 参数: dwConnID -- 连接 ID
  927. * pData -- 窥探缓冲区
  928. * iLength -- 窥探数据长度
  929. * 返回值: En_HP_FetchResult
  930. */ }
  931. function HP_TcpPullServer_Peek(pServer: HP_TcpPullServer; dwConnID: HP_CONNID; pData: Pointer; iLength: Integer): En_HP_FetchResult;
  932. stdcall; external HPSocketDLL;
  933. { /***************************************************************************************/
  934. /***************************** TCP Pull Server 属性访问方法 *****************************/ }
  935. { /***************************************************************************************/
  936. /***************************** TCP Pull Agent 组件操作方法 *****************************/ }
  937. { TODO
  938. * 名称:抓取数据
  939. * 描述:用户通过该方法从 Socket 组件中抓取数据
  940. *
  941. * 参数: dwConnID -- 连接 ID
  942. * pBuffer -- 数据抓取缓冲区
  943. * iLength -- 抓取数据长度
  944. * 返回值: En_HP_FetchResult
  945. */ }
  946. function HP_TcpPullAgent_Fetch(pAgent: HP_TcpPullAgent; dwConnID: HP_CONNID; pBuffer: Pointer; iLength: Integer): En_HP_FetchResult;
  947. stdcall; external HPSocketDLL;
  948. {TODO* 名称:窥探数据(不会移除缓冲区数据)
  949. * 描述:用户通过该方法从 Socket 组件中窥探数据
  950. *
  951. * 参数: dwConnID -- 连接 ID
  952. * pData -- 窥探缓冲区
  953. * iLength -- 窥探数据长度
  954. * 返回值: En_HP_FetchResult }
  955. function HP_TcpPullAgent_Peek(pAgent: HP_TcpPullAgent; dwConnID: HP_CONNID; pBuffer: Pointer; iLength: Integer): En_HP_FetchResult;
  956. stdcall; external HPSocketDLL;
  957. { ***************************** TCP Pull Client 组件操作方法 *****************************/ }
  958. { TODO
  959. * 名称:抓取数据
  960. * 描述:用户通过该方法从 Socket 组件中抓取数据
  961. *
  962. * 参数: dwConnID -- 连接 ID
  963. * pData -- 抓取缓冲区
  964. * iLength -- 抓取数据长度
  965. * 返回值: En_HP_FetchResult
  966. */ }
  967. function HP_TcpPullClient_Fetch(pClient: HP_TcpPullClient; pData: Pointer; iLength: Integer): En_HP_FetchResult;
  968. stdcall; external HPSocketDLL;
  969. { TODO
  970. * 名称:窥探数据(不会移除缓冲区数据)
  971. * 描述:用户通过该方法从 Socket 组件中窥探数据
  972. *
  973. * 参数: dwConnID -- 连接 ID
  974. * pData -- 窥探缓冲区
  975. * iLength -- 窥探数据长度
  976. * 返回值: En_HP_FetchResult
  977. */ }
  978. function HP_TcpPullClient_Peek(pClient: HP_TcpPullClient; pData: Pointer; iLength: Integer): En_HP_FetchResult;
  979. stdcall; external HPSocketDLL;
  980. {/***************************** TCP Pack Server 属性访问方法 *****************************/ }
  981. {TODO/* 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */}
  982. procedure HP_TcpPackServer_SetMaxPackSize(pServer: HP_TcpPackServer ; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
  983. {TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
  984. procedure HP_TcpPackServer_SetPackHeaderFlag(pServer: HP_TcpPackServer ; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
  985. {TODO 获取数据包最大长度 */ }
  986. function HP_TcpPackServer_GetMaxPackSize(pServer: HP_TcpPackServer): LongWord; stdcall; external HPSocketDLL;
  987. {TODO 获取包头标识 */ }
  988. function HP_TcpPackServer_GetPackHeaderFlag(pServer: HP_TcpPackServer): Word; stdcall; external HPSocketDLL;
  989. //***************************** TCP Pack Agent 属性访问方法 *****************************/
  990. {TODO 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */}
  991. procedure HP_TcpPackAgent_SetMaxPackSize(pAgent: HP_TcpPackAgent; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
  992. {TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
  993. procedure HP_TcpPackAgent_SetPackHeaderFlag(pAgent: HP_TcpPackAgent; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
  994. {TODO 获取数据包最大长度 */ }
  995. function HP_TcpPackAgent_GetMaxPackSize(pAgent: HP_TcpPackAgent): LongWord; stdcall; external HPSocketDLL;
  996. {TODO 获取包头标识 */ }
  997. function HP_TcpPackAgent_GetPackHeaderFlag(pAgent: HP_TcpPackAgent): Word; stdcall; external HPSocketDLL;
  998. //***************************** TCP Pack Client 属性访问方法 *****************************/
  999. {TODO 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */ }
  1000. procedure HP_TcpPackClient_SetMaxPackSize(pClient: HP_TcpPackAgent; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
  1001. {TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
  1002. procedure HP_TcpPackClient_SetPackHeaderFlag(pClient: HP_TcpPackAgent; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
  1003. {TODO 获取数据包最大长度 */ }
  1004. function HP_TcpPackClient_GetMaxPackSize(pClient: HP_TcpPackAgent): LongWord; stdcall; external HPSocketDLL;
  1005. {TODO 获取包头标识 */ }
  1006. function HP_TcpPackClient_GetPackHeaderFlag(pClient: HP_TcpPackAgent): Word; stdcall; external HPSocketDLL;
  1007. { ************************************** 其它方法 ***************************************/ }
  1008. { /* 获取错误描述文本 */ }
  1009. function HP_GetSocketErrorDesc(enCode: En_HP_SocketError): PWideChar; stdcall; external HPSocketDLL;
  1010. { /* 调用系统的 ::GetLastError() 方法获取系统错误代码 */ }
  1011. function SYS_GetLastError(): LongInt; stdcall; external HPSocketDLL;
  1012. // 调用系统的 ::WSAGetLastError() 方法获取通信错误代码
  1013. function SYS_WSAGetLastError(): Integer; stdcall; external HPSocketDLL;
  1014. // 调用系统的 setsockopt()
  1015. function SYS_SetSocketOption(sock: SOCKET; level: Integer; name: Integer; val: pointer; len: Integer): Integer; stdcall; external HPSocketDLL;
  1016. // 调用系统的 getsockopt()
  1017. function SYS_GetSocketOption(sock: SOCKET; level: Integer; name: Integer; val: Pointer; len: PInteger): Integer; stdcall; external HPSocketDLL;
  1018. // 调用系统的 ioctlsocket()
  1019. function SYS_IoctlSocket(sock: SOCKET; cmd: LongInt; arg: PULONG): Integer; stdcall; external HPSocketDLL;
  1020. // 调用系统的 ::WSAIoctl()
  1021. function SYS_WSAIoctl(sock: SOCKET; dwIoControlCode: LongInt; lpvInBuffer: pointer; cbInBuffer: LongInt; lpvOutBuffer: pointer; cbOutBuffer: LongInt; lpcbBytesReturned: LPDWORD): Integer; stdcall; external HPSocketDLL;
  1022. implementation
  1023. initialization
  1024. IsMultiThread := True;
  1025. end.