1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Runtime.InteropServices;
- using System.Security.Cryptography;
- using System.IO;
- namespace HPSocketCS
- {
- /// <summary>
- /// Unicode版本
- /// </summary>
- public class Sdk_x86
- {
- /// <summary>
- /// HPSocket的文件路径
- /// </summary>
- #if DEBUG
- private const string HPSOCKET_DLL_PATH = "HPSocket4C_UD_x86.dll";
- #else
- private const string HPSOCKET_DLL_PATH = "HPSocket4C_U_x86.dll";
- #endif
- /*****************************************************************************************************/
- /******************************************** 公共类、接口 ********************************************/
- /*****************************************************************************************************/
- /****************************************************/
- /************** HPSocket4C.dll 导出函数 **************/
- /// <summary>
- /// 创建 TcpServer 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpServer(IntPtr pListener);
- /// <summary>
- /// 创建 TcpClient 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpClient(IntPtr pListener);
- /// <summary>
- /// 创建 TcpAgent 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpAgent(IntPtr pListener);
- /// <summary>
- /// 创建 TcpPullServer 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpPullServer(IntPtr pListener);
- /// <summary>
- /// 创建 TcpPullClient 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpPullClient(IntPtr pListener);
- /// <summary>
- /// 创建 TcpPullAgent 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpPullAgent(IntPtr pListener);
- /// <summary>
- /// 创建 HP_TcpPackServer 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpPackServer(IntPtr pListener);
- /// <summary>
- /// 创建 HP_TcpPackAgent 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpPackAgent(IntPtr pListener);
- /// <summary>
- /// 创建 HP_TcpPackAgent 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpPackClient(IntPtr pListener);
- /// <summary>
- /// 创建 UdpServer 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_UdpServer(IntPtr pListener);
- /// <summary>
- /// 创建 UdpClient 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_UdpClient(IntPtr pListener);
- /// <summary>
- /// 销毁 TcpServer 对象
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpServer(IntPtr pServer);
- /// <summary>
- /// 销毁 TcpClient 对象
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpClient(IntPtr pClient);
- /// <summary>
- /// 销毁 TcpAgent 对象
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpAgent(IntPtr pAgent);
- /// <summary>
- /// 销毁 TcpPullServer 对象
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpPullServer(IntPtr pServer);
- /// <summary>
- /// 销毁 TcpPullClient 对象
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpPullClient(IntPtr pClient);
- /// <summary>
- /// 销毁 TcpPullAgent 对象
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpPullAgent(IntPtr pAgent);
- /// <summary>
- /// 销毁 HP_TcpPackServer 对象
- /// </summary>
- /// <param name="pServer"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpPackServer(IntPtr pServer);
- /// <summary>
- /// 销毁 HP_TcpPackAgent 对象
- /// </summary>
- /// <param name="pAgent"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpPackAgent(IntPtr pAgent);
- /// <summary>
- /// 销毁 HP_TcpPackClient 对象
- /// </summary>
- /// <param name="pClient"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpPackClient(IntPtr pClient);
- /// <summary>
- /// 销毁 UdpServer 对象
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_UdpServer(IntPtr pServer);
- /// <summary>
- /// 销毁 UdpClient 对象
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_UdpClient(IntPtr pClient);
- /// <summary>
- /// 创建 TcpServerListener 对象
- /// </summary>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpServerListener();
- /// <summary>
- /// 创建 TcpClientListener 对象
- /// </summary>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpClientListener();
- /// <summary>
- /// 创建 TcpAgentListener 对象
- /// </summary>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpAgentListener();
- /// <summary>
- /// 创建 TcpPullServerListener 对象
- /// </summary>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpPullServerListener();
- /// <summary>
- /// 创建 TcpPullClientListener 对象
- /// </summary>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpPullClientListener();
- /// <summary>
- /// 创建 TcpPullAgentListener 对象
- /// </summary>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_TcpPullAgentListener();
- /// <summary>
- /// 创建 UdpServerListener 对象
- /// </summary>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_UdpServerListener();
- /// <summary>
- /// 创建 UdpClientListener 对象
- /// </summary>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr Create_HP_UdpClientListener();
- /// <summary>
- /// 销毁 TcpServerListener 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpServerListener(IntPtr pListener);
- /// <summary>
- /// 销毁 TcpClientListener 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpClientListener(IntPtr pListener);
- /// <summary>
- /// 销毁 TcpAgentListener 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpAgentListener(IntPtr pListener);
- /// <summary>
- /// 销毁 TcpPullServerListener 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpPullServerListener(IntPtr pListener);
- /// <summary>
- /// 销毁 TcpPullClientListener 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpPullClientListener(IntPtr pListener);
- /// <summary>
- /// 销毁 TcpPullAgentListener 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_TcpPullAgentListener(IntPtr pListener);
- /// <summary>
- /// 销毁 UdpServerListener 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_UdpServerListener(IntPtr pListener);
- /// <summary>
- /// 销毁 UdpClientListener 对象
- /// </summary>
- /// <param name="pListener"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void Destroy_HP_UdpClientListener(IntPtr pListener);
- /**********************************************************************************/
- /***************************** Server 回调函数设置方法 *****************************/
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Server_OnPrepareListen(IntPtr pListener, Sdk.OnPrepareListen fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Server_OnAccept(IntPtr pListener, Sdk.OnAccept fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Server_OnHandShake(IntPtr pListener, Sdk.OnHandShake fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Server_OnSend(IntPtr pListener, Sdk.OnSend fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Server_OnReceive(IntPtr pListener, Sdk.OnReceive fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Server_OnPullReceive(IntPtr pListener, Sdk.OnPullReceive fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Server_OnClose(IntPtr pListener, Sdk.OnClose fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Server_OnShutdown(IntPtr pListener, Sdk.OnShutdown fn);
- /**********************************************************************************/
- /***************************** Client 回调函数设置方法 *****************************/
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Client_OnPrepareConnect(IntPtr pListener, Sdk.OnPrepareConnect fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Client_OnConnect(IntPtr pListener, Sdk.OnConnect fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Client_OnHandShake(IntPtr pListener, Sdk.OnHandShake fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Client_OnSend(IntPtr pListener, Sdk.OnSend fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Client_OnReceive(IntPtr pListener, Sdk.OnReceive fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Client_OnPullReceive(IntPtr pListener, Sdk.OnPullReceive fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Client_OnClose(IntPtr pListener, Sdk.OnClose fn);
- /**********************************************************************************/
- /****************************** Agent 回调函数设置方法 *****************************/
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Agent_OnPrepareConnect(IntPtr pListener, Sdk.OnPrepareConnect fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Agent_OnConnect(IntPtr pListener, Sdk.OnConnect fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Agent_OnHandShake(IntPtr pListener, Sdk.OnHandShake fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Agent_OnSend(IntPtr pListener, Sdk.OnSend fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Agent_OnReceive(IntPtr pListener, Sdk.OnReceive fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Agent_OnPullReceive(IntPtr pListener, Sdk.OnPullReceive fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Agent_OnClose(IntPtr pListener, Sdk.OnClose fn);
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Set_FN_Agent_OnShutdown(IntPtr pListener, Sdk.OnShutdown fn);
- /**************************************************************************/
- /***************************** Server 操作方法 *****************************/
- /// <summary>
- /// 名称:启动通信组件
- /// 描述:启动服务端通信组件,启动完成后可开始接收客户端连接并收发数据
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="pszBindAddress">监听地址</param>
- /// <param name="usPort">监听端口</param>
- /// <returns>失败,可通过 GetLastError() 获取错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
- public static extern bool HP_Server_Start(IntPtr pServer, string pszBindAddress, ushort usPort);
- /// <summary>
- /// 关闭服务端通信组件,关闭完成后断开所有客户端连接并释放所有资源
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns>失败,可通过 GetLastError() 获取错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_Stop(IntPtr pServer);
- /// <summary>
- /// 用户通过该方法向指定客户端发送数据
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffer">发送数据长度</param>
- /// <param name="length">发送数据长度</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
- public static extern bool HP_Server_Send(IntPtr pServer, IntPtr connId, byte[] pBuffer, int length);
- /// <summary>
- /// 用户通过该方法向指定客户端发送数据
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffer">发送数据长度</param>
- /// <param name="length">发送数据长度</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern bool HP_Server_Send(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length);
- /// <summary>
- /// 用户通过该方法向指定客户端发送数据
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId"></param>
- /// <param name="pBuffer"></param>
- /// <param name="length"></param>
- /// <param name="iOffset">针对pBuffer的偏移</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
- public static extern bool HP_Server_SendPart(IntPtr pServer, IntPtr connId, byte[] pBuffer, int length, int iOffset);
- /// <summary>
- /// 用户通过该方法向指定客户端发送数据
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId"></param>
- /// <param name="pBuffer"></param>
- /// <param name="length"></param>
- /// <param name="iOffset">针对pBuffer的偏移</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern bool HP_Server_SendPart(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length, int iOffset);
- /// <summary>
- /// 发送多组数据
- /// 向指定连接发送多组数据
- /// TCP - 顺序发送所有数据包
- /// UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffers">发送缓冲区数组</param>
- /// <param name="iCount">发送缓冲区数目</param>
- /// <returns>TRUE.成功,FALSE.失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern bool HP_Server_SendPackets(IntPtr pServer, IntPtr connId, WSABUF[] pBuffers, int iCount);
- /// <summary>
- /// 断开与某个客户端的连接
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="bForce">是否强制断开连接</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_Disconnect(IntPtr pServer, IntPtr connId, bool bForce);
- /// <summary>
- /// 断开超过指定时长的连接
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwPeriod">时长(毫秒)</param>
- /// <param name="bForce">是否强制断开连接</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_DisconnectLongConnections(IntPtr pServer, uint dwPeriod, bool bForce);
- /// <summary>
- /// 断开超过指定时长的静默连接
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwPeriod">时长(毫秒)</param>
- /// <param name="bForce">是否强制断开连接</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_DisconnectSilenceConnections(IntPtr pServer, uint dwPeriod, bool bForce);
- /******************************************************************************/
- /***************************** Server 属性访问方法 *****************************/
- /// <summary>
- /// 设置数据发送策略
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="enSendPolicy"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Server_SetSendPolicy(IntPtr pServer, SendPolicy enSendPolicy);
- /// <summary>
- /// 获取数据发送策略
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern SendPolicy HP_Server_GetSendPolicy(IntPtr pServer);
- /// <summary>
- /// 设置连接的附加数据
- /// 是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pExtra"></param>
- /// <returns>若返回 false 失败则为(无效的连接 ID)</returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_SetConnectionExtra(IntPtr pServer, IntPtr connId, IntPtr pExtra);
- /// <summary>
- /// 获取连接的附加数据
- /// 是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pExtra">数据指针</param>
- /// <returns>若返回 false 失败则为(无效的连接 ID)</returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_GetConnectionExtra(IntPtr pServer, IntPtr connId, ref IntPtr pExtra);
- /// <summary>
- /// 检查通信组件是否已启动
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_HasStarted(IntPtr pServer);
- /// <summary>
- /// 查看通信组件当前状态
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern ServiceState HP_Server_GetState(IntPtr pServer);
- /// <summary>
- /// 获取最近一次失败操作的错误代码
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern SocketError HP_Server_GetLastError(IntPtr pServer);
- /// <summary>
- /// 获取最近一次失败操作的错误描述
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr HP_Server_GetLastErrorDesc(IntPtr pServer);
- /// <summary>
- /// 获取连接中未发出数据的长度
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId"></param>
- /// <param name="piPending"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_GetPendingDataLength(IntPtr pServer, IntPtr connId, ref int piPending);
- /// <summary>
- /// 获取客户端连接数
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Server_GetConnectionCount(IntPtr pServer);
- /// <summary>
- /// 获取所有连接的 CONNID
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="pIDs"></param>
- /// <param name="pdwCount"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_GetAllConnectionIDs(IntPtr pServer, IntPtr[] pIDs, ref uint pdwCount);
- /// <summary>
- /// 获取某个客户端连接时长(毫秒)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId"></param>
- /// <param name="pdwPeriod"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_GetConnectPeriod(IntPtr pServer, IntPtr connId, ref uint pdwPeriod);
- /// <summary>
- /// 获取某个连接静默时间(毫秒)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId"></param>
- /// <param name="pdwPeriod"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_GetSilencePeriod(IntPtr pServer, IntPtr connId, ref uint pdwPeriod);
- /// <summary>
- /// 获取监听 Socket 的地址信息
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="lpszAddress"></param>
- /// <param name="piAddressLen"></param>
- /// <param name="pusPort"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_GetListenAddress(IntPtr pServer, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
- /// <summary>
- /// 获取某个客户端连接的地址信息
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId"></param>
- /// <param name="lpszAddress"></param>
- /// <param name="piAddressLen">传入传出值,大小最好在222.222.222.222的长度以上</param>
- /// <param name="pusPort"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_GetRemoteAddress(IntPtr pServer, IntPtr connId, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
- /// <summary>
- /// 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwFreeSocketObjLockTime"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Server_SetFreeSocketObjLockTime(IntPtr pServer, uint dwFreeSocketObjLockTime);
- /// <summary>
- /// 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwFreeSocketObjPool"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Server_SetFreeSocketObjPool(IntPtr pServer, uint dwFreeSocketObjPool);
- /// <summary>
- /// 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwFreeBufferObjPool"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Server_SetFreeBufferObjPool(IntPtr pServer, uint dwFreeBufferObjPool);
- /// <summary>
- /// 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwFreeSocketObjHold"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Server_SetFreeSocketObjHold(IntPtr pServer, uint dwFreeSocketObjHold);
- /// <summary>
- /// 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwFreeBufferObjHold"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Server_SetFreeBufferObjHold(IntPtr pServer, uint dwFreeBufferObjHold);
- /// <summary>
- /// 设置工作线程数量(通常设置为 2 * CPU + 2)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwWorkerThreadCount"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Server_SetWorkerThreadCount(IntPtr pServer, uint dwWorkerThreadCount);
- /// <summary>
- /// 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="bMarkSilence"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Server_SetMarkSilence(IntPtr pServer, bool bMarkSilence);
- /// <summary>
- /// 获取 Socket 缓存对象锁定时间
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Server_GetFreeSocketObjLockTime(IntPtr pServer);
- /// <summary>
- /// 获取 Socket 缓存池大小
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Server_GetFreeSocketObjPool(IntPtr pServer);
- /// <summary>
- /// 获取内存块缓存池大小
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Server_GetFreeBufferObjPool(IntPtr pServer);
- /// <summary>
- /// 获取 Socket 缓存池回收阀值
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Server_GetFreeSocketObjHold(IntPtr pServer);
- /// <summary>
- /// 获取内存块缓存池回收阀值
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Server_GetFreeBufferObjHold(IntPtr pServer);
- /// <summary>
- /// 获取工作线程数量
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Server_GetWorkerThreadCount(IntPtr pServer);
- /// <summary>
- /// 检测是否标记静默时间
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Server_IsMarkSilence(IntPtr pServer);
- /**********************************************************************************/
- /***************************** TCP Server 操作方法 *****************************/
- /// <summary>
- /// 名称:发送小文件
- /// 描述:向指定连接发送 4096 KB 以下的小文件
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="lpszFileName">文件路径</param>
- /// <param name="pHead">头部附加数据</param>
- /// <param name="pTail">尾部附加数据</param>
- /// <returns>TRUE.成功 FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
- public static extern bool HP_TcpServer_SendSmallFile(IntPtr pServer, IntPtr connId, string lpszFileName, ref WSABUF pHead, ref WSABUF pTail);
- /**********************************************************************************/
- /***************************** TCP Server 属性访问方法 *****************************/
- /// <summary>
- /// 设置 Accept 预投递数量(根据负载调整设置,Accept 预投递数量越大则支持的并发连接请求越多)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwAcceptSocketCount"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpServer_SetAcceptSocketCount(IntPtr pServer, uint dwAcceptSocketCount);
- /// <summary>
- /// 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwSocketBufferSize"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpServer_SetSocketBufferSize(IntPtr pServer, uint dwSocketBufferSize);
- /// <summary>
- /// 设置监听 Socket 的等候队列大小(根据并发连接数量调整设置)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwSocketListenQueue"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpServer_SetSocketListenQueue(IntPtr pServer, uint dwSocketListenQueue);
- /// <summary>
- /// 设置心跳包间隔(毫秒,0 则不发送心跳包)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwKeepAliveTime"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpServer_SetKeepAliveTime(IntPtr pServer, uint dwKeepAliveTime);
- /// <summary>
- /// 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwKeepAliveInterval"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpServer_SetKeepAliveInterval(IntPtr pServer, uint dwKeepAliveInterval);
- /// <summary>
- /// 获取 Accept 预投递数量
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpServer_GetAcceptSocketCount(IntPtr pServer);
- /// <summary>
- /// 获取通信数据缓冲区大小
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpServer_GetSocketBufferSize(IntPtr pServer);
- /// <summary>
- /// 获取监听 Socket 的等候队列大小
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpServer_GetSocketListenQueue(IntPtr pServer);
- /// <summary>
- /// 获取心跳检查次数
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpServer_GetKeepAliveTime(IntPtr pServer);
- /// <summary>
- /// 获取心跳检查间隔
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpServer_GetKeepAliveInterval(IntPtr pServer);
- /**********************************************************************************/
- /***************************** UDP Server 属性访问方法 *****************************/
- /// <summary>
- /// 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwMaxDatagramSize"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_UdpServer_SetMaxDatagramSize(IntPtr pServer, uint dwMaxDatagramSize);
- /// <summary>
- /// 获取数据报文最大长度
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_UdpServer_GetMaxDatagramSize(IntPtr pServer);
- /// <summary>
- /// 设置 Receive 预投递数量(根据负载调整设置,Receive 预投递数量越大则丢包概率越小)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwPostReceiveCount"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_UdpServer_SetPostReceiveCount(IntPtr pServer, uint dwPostReceiveCount);
- /// <summary>
- /// 获取 Receive 预投递数量
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_UdpServer_GetPostReceiveCount(IntPtr pServer);
- /// <summary>
- /// 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwMaxDatagramSize"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_UdpServer_SetDetectAttempts(IntPtr pServer, uint dwMaxDatagramSize);
- /// <summary>
- /// 设置监测包发送间隔(秒,0 不发送监测包)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwMaxDatagramSize"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_UdpServer_SetDetectInterval(IntPtr pServer, uint dwMaxDatagramSize);
- /// <summary>
- /// 获取心跳检查次数
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_UdpServer_GetDetectAttempts(IntPtr pServer);
- /// <summary>
- /// 获取心跳检查间隔
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_UdpServer_GetDetectInterval(IntPtr pServer);
- /******************************************************************************/
- /***************************** Client 组件操作方法 *****************************/
- /// <summary>
- /// 启动客户端通信组件并连接服务端,启动完成后可开始收发数据
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="pszRemoteAddress">服务端地址</param>
- /// <param name="usPort">服务端端口</param>
- /// <param name="bAsyncConnect">是否采用异步 Connnect</param>
- /// <returns>失败,可通过 HP_Client_GetLastError() 获取错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
- public static extern bool HP_Client_Start(IntPtr pClient, string pszRemoteAddress, ushort usPort, bool bAsyncConnect);
- /// <summary>
- /// 启动通信组件(并指定绑定地址), 启动客户端通信组件并连接服务端,启动完成后可开始收发数据
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="lpszRemoteAddress">服务端地址</param>
- /// <param name="usPort">服务端端口</param>
- /// <param name="bAsyncConnect">是否采用异步 Connect</param>
- /// <param name="lpszBindAddress">绑定地址(默认:nullptr,TcpClient/UdpClient -> 不执行绑定操作,UdpCast 绑定 -> 0.0.0.0)</param>
- /// <returns>失败,可通过 HP_Client_GetLastError() 获取错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
- public static extern bool HP_Client_StartWithBindAddress(IntPtr pClient, string lpszRemoteAddress, ushort usPort, bool bAsyncConnect, string lpszBindAddress);
- /// <summary>
- /// 关闭客户端通信组件,关闭完成后断开与服务端的连接并释放所有资源
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns>失败,可通过 HP_Client_GetLastError() 获取错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Client_Stop(IntPtr pClient);
- /// <summary>
- /// 用户通过该方法向服务端发送数据
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="connId">连接 ID(保留参数,目前该参数并未使用)</param>
- /// <param name="pBuffer">发送数据缓冲区</param>
- /// <param name="length">发送数据长度</param>
- /// <returns>失败,可通过 HP_Client_GetLastError() 获取错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
- public static extern bool HP_Client_Send(IntPtr pClient, byte[] pBuffer, int length);
- /// <summary>
- /// 用户通过该方法向服务端发送数据
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="connId">连接 ID(保留参数,目前该参数并未使用)</param>
- /// <param name="pBuffer">发送数据缓冲区</param>
- /// <param name="length">发送数据长度</param>
- /// <returns>失败,可通过 HP_Client_GetLastError() 获取错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern bool HP_Client_Send(IntPtr pClient, IntPtr pBuffer, int length);
- /// <summary>
- /// 用户通过该方法向服务端发送数据
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="pBuffer"></param>
- /// <param name="length"></param>
- /// <param name="iOffset">针对pBuffer的偏移</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
- public static extern bool HP_Client_SendPart(IntPtr pClient, byte[] pBuffer, int length, int iOffset);
- /// <summary>
- /// 用户通过该方法向服务端发送数据
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="pBuffer"></param>
- /// <param name="length"></param>
- /// <param name="iOffset">针对pBuffer的偏移</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern bool HP_Client_SendPart(IntPtr pClient, IntPtr pBuffer, int length, int iOffset);
- /// <summary>
- /// 发送多组数据
- /// 向服务端发送多组数据
- /// TCP - 顺序发送所有数据包
- /// UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="pBuffers">发送缓冲区数组</param>
- /// <param name="iCount">发送缓冲区数目</param>
- /// <returns>TRUE.成功,FALSE.失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern bool HP_Client_SendPackets(IntPtr pClient, WSABUF[] pBuffers, int iCount);
- /******************************************************************************/
- /***************************** Client 属性访问方法 *****************************/
- /// <summary>
- /// 设置连接的附加数据
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="pExtra"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Client_SetExtra(IntPtr pClient, IntPtr pExtra);
- /// <summary>
- /// 获取连接的附加数据
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr HP_Client_GetExtra(IntPtr pClient);
- /// <summary>
- /// 检查通信组件是否已启动
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Client_HasStarted(IntPtr pClient);
- /// <summary>
- /// 查看通信组件当前状态
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern ServiceState HP_Client_GetState(IntPtr pClient);
- /// <summary>
- /// 获取最近一次失败操作的错误代码
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern SocketError HP_Client_GetLastError(IntPtr pClient);
- /// <summary>
- /// 获取最近一次失败操作的错误描述
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr HP_Client_GetLastErrorDesc(IntPtr pClient);
- /// <summary>
- /// 获取该组件对象的连接 ID
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr HP_Client_GetConnectionID(IntPtr pClient);
- /// <summary>
- /// 获取 Client Socket 的地址信息
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="lpszAddress"></param>
- /// <param name="piAddressLen"></param>
- /// <param name="pusPort"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Client_GetLocalAddress(IntPtr pClient, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
- /// <summary>
- /// 获取连接中未发出数据的长度
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="piPending"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Client_GetPendingDataLength(IntPtr pClient, ref int piPending);
- /// <summary>
- /// 设置内存块缓存池大小(通常设置为 -> PUSH 模型:5 - 10;PULL 模型:10 - 20 )
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="dwFreeBufferPoolSize"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Client_SetFreeBufferPoolSize(IntPtr pClient, uint dwFreeBufferPoolSize);
- /// <summary>
- /// 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍)
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="dwFreeBufferPoolHold"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Client_SetFreeBufferPoolHold(IntPtr pClient, uint dwFreeBufferPoolHold);
- /// <summary>
- /// 获取内存块缓存池大小
- /// </summary>
- /// <param name="pClient"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Client_GetFreeBufferPoolSize(IntPtr pClient);
- /// <summary>
- /// 获取内存块缓存池回收阀值
- /// </summary>
- /// <param name="pClient"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Client_GetFreeBufferPoolHold(IntPtr pClient);
- /**********************************************************************************/
- /***************************** TCP Client 操作方法 *****************************/
- /// <summary>
- /// 名称:发送小文件
- /// 描述:向指定连接发送 4096 KB 以下的小文件
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="lpszFileName">文件路径</param>
- /// <param name="pHead">头部附加数据</param>
- /// <param name="pTail">尾部附加数据</param>
- /// <returns>TRUE.成功 FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
- public static extern bool HP_TcpClient_SendSmallFile(IntPtr pClient, string lpszFileName, ref WSABUF pHead, ref WSABUF pTail);
- /**********************************************************************************/
- /***************************** TCP Client 属性访问方法 *****************************/
- /// <summary>
- /// 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为:(N * 1024) - sizeof(TBufferObj))
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="dwSocketBufferSize"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpClient_SetSocketBufferSize(IntPtr pClient, uint dwSocketBufferSize);
- /// <summary>
- /// 设置心跳包间隔(毫秒,0 则不发送心跳包)
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="dwKeepAliveTime"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpClient_SetKeepAliveTime(IntPtr pClient, uint dwKeepAliveTime);
- /// <summary>
- /// 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线)
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="dwKeepAliveInterval"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpClient_SetKeepAliveInterval(IntPtr pClient, uint dwKeepAliveInterval);
- /// <summary>
- /// 获取通信数据缓冲区大小
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpClient_GetSocketBufferSize(IntPtr pClient);
- /// <summary>
- /// 获取心跳检查次数
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpClient_GetKeepAliveTime(IntPtr pClient);
- /// <summary>
- /// 获取心跳检查间隔
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpClient_GetKeepAliveInterval(IntPtr pClient);
- /**********************************************************************************/
- /***************************** UDP Client 属性访问方法 *****************************/
- /// <summary>
- /// 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节)
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="dwMaxDatagramSize"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_UdpClient_SetMaxDatagramSize(IntPtr pClient, uint dwMaxDatagramSize);
- /// <summary>
- /// 获取数据报文最大长度
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_UdpClient_GetMaxDatagramSize(IntPtr pClient);
- /// <summary>
- /// 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="dwDetectAttempts"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_UdpClient_SetDetectAttempts(IntPtr pClient, uint dwDetectAttempts);
- /// <summary>
- /// 设置监测包发送间隔(秒,0 不发送监测包)
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="dwDetectInterval"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_UdpClient_SetDetectInterval(IntPtr pClient, uint dwDetectInterval);
- /// <summary>
- /// 获取心跳检查次数
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_UdpClient_GetDetectAttempts(IntPtr pClient);
- /// <summary>
- /// 获取心跳检查间隔
- /// </summary>
- /// <param name="pClient"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_UdpClient_GetDetectInterval(IntPtr pClient);
- /**************************************************************************/
- /***************************** Agent 操作方法 *****************************/
- /// <summary>
- /// 启动通信组件
- /// 启动通信代理组件,启动完成后可开始连接远程服务器
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="pszBindAddress">监听地址</param>
- /// <param name="bAsyncConnect">是否采用异步 Connect</param>
- /// <returns>失败,可通过 GetLastError() 获取错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
- public static extern bool HP_Agent_Start(IntPtr pAgent, string pszBindAddress, bool bAsyncConnect);
- /// <summary>
- /// 关闭通信组件
- /// 关闭通信组件,关闭完成后断开所有连接并释放所有资源
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns>-- 失败,可通过 GetLastError() 获取错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_Stop(IntPtr pAgent);
- /// <summary>
- /// 连接服务器
- /// 连接服务器,连接成功后 IAgentListener 会接收到 OnConnect() 事件
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="pszBindAddress">服务端地址</param>
- /// <param name="usPort">服务端端口</param>
- /// <param name="pconnId">传出连接 ID</param>
- /// <returns>失败,可通过 SYS_GetLastError() 获取 Windows 错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
- public static extern bool HP_Agent_Connect(IntPtr pAgent, string pszBindAddress, ushort usPort, ref IntPtr pconnId);
- /// <summary>
- /// 发送数据
- /// 用户通过该方法向指定连接发送数据
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffer">发送数据缓冲区</param>
- /// <param name="length">发送数据长度</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
- public static extern bool HP_Agent_Send(IntPtr pAgent, IntPtr connId, byte[] pBuffer, int length);
- /// <summary>
- /// 发送数据
- /// 用户通过该方法向指定连接发送数据
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffer">发送数据缓冲区</param>
- /// <param name="length">发送数据长度</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern bool HP_Agent_Send(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length);
- /// <summary>
- /// 发送数据
- /// 用户通过该方法向指定连接发送数据
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId"></param>
- /// <param name="pBuffer"></param>
- /// <param name="length"></param>
- /// <param name="iOffset">针对pBuffer的偏移</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern bool HP_Agent_SendPart(IntPtr pAgent, IntPtr connId, byte[] pBuffer, int length, int iOffset);
- /// <summary>
- /// 发送数据
- /// 用户通过该方法向指定连接发送数据
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId"></param>
- /// <param name="pBuffer"></param>
- /// <param name="length"></param>
- /// <param name="iOffset">针对pBuffer的偏移</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern bool HP_Agent_SendPart(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length, int iOffset);
- /// <summary>
- /// 发送多组数据
- /// 向指定连接发送多组数据
- /// TCP - 顺序发送所有数据包
- /// UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffers">发送缓冲区数组</param>
- /// <param name="iCount">发送缓冲区数目</param>
- /// <returns>TRUE.成功,FALSE .失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern bool HP_Agent_SendPackets(IntPtr pAgent, IntPtr connId, WSABUF[] pBuffers, int iCount);
- /// <summary>
- /// 断开某个连接
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="bForce">是否强制断开连接</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_Disconnect(IntPtr pAgent, IntPtr connId, bool bForce);
- /// <summary>
- /// 断开超过指定时长的连接
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="dwPeriod">时长(毫秒)</param>
- /// <param name="bForce">是否强制断开连接</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_DisconnectLongConnections(IntPtr pAgent, uint dwPeriod, bool bForce);
- /// <summary>
- /// 断开超过指定时长的静默连接
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwPeriod">时长(毫秒)</param>
- /// <param name="bForce">是否强制断开连接</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_DisconnectSilenceConnections(IntPtr pAgent, uint dwPeriod, bool bForce);
- /******************************************************************************/
- /***************************** Agent 操作方法 *****************************/
- /// <summary>
- /// 名称:发送小文件
- /// 描述:向指定连接发送 4096 KB 以下的小文件
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="lpszFileName">文件路径</param>
- /// <param name="pHead">头部附加数据</param>
- /// <param name="pTail">尾部附加数据</param>
- /// <returns>TRUE.成功 FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码</returns>
- [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
- public static extern bool HP_TcpAgent_SendSmallFile(IntPtr pAgent, IntPtr connId, string lpszFileName, ref WSABUF pHead, ref WSABUF pTail);
- /******************************************************************************/
- /***************************** Agent 属性访问方法 *****************************/
- /// <summary>
- /// 设置数据发送策略
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="enSendPolicy"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Agent_SetSendPolicy(IntPtr pAgent, SendPolicy enSendPolicy);
- /// <summary>
- /// 获取数据发送策略
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern SendPolicy HP_Agent_GetSendPolicy(IntPtr pAgent);
- /// <summary>
- /// 设置连接的附加数据
- /// 是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pExtra">数据</param>
- /// <returns>FALSE -- 失败(无效的连接 ID)</returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_SetConnectionExtra(IntPtr pAgent, IntPtr connId, IntPtr pExtra);
- /// <summary>
- /// 获取连接的附加数据
- /// 是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId"></param>
- /// <param name="pExtra"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_GetConnectionExtra(IntPtr pAgent, IntPtr connId, ref IntPtr pExtra);
- /// <summary>
- /// 检查通信组件是否已启动
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_HasStarted(IntPtr pAgent);
- /// <summary>
- /// 查看通信组件当前状态
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern ServiceState HP_Agent_GetState(IntPtr pAgent);
- /// <summary>
- /// 获取连接数
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Agent_GetConnectionCount(IntPtr pAgent);
- /// <summary>
- /// 获取所有连接的 CONNID
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="pIDs"></param>
- /// <param name="pdwCount"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_GetAllConnectionIDs(IntPtr pAgent, IntPtr[] pIDs, ref uint pdwCount);
- /// <summary>
- /// 获取某个连接时长(毫秒)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId"></param>
- /// <param name="pdwPeriod"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_GetConnectPeriod(IntPtr pAgent, IntPtr connId, ref uint pdwPeriod);
- /// <summary>
- /// 获取某个连接静默时间(毫秒)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId"></param>
- /// <param name="pdwPeriod"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_GetSilencePeriod(IntPtr pAgent, IntPtr connId, ref uint pdwPeriod);
- /// <summary>
- /// 获取监听 Socket 的地址信息
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId"></param>
- /// <param name="lpszAddress"></param>
- /// <param name="piAddressLen"></param>
- /// <param name="pusPort"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_GetLocalAddress(IntPtr pAgent, IntPtr connId, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
- /// <summary>
- /// 获取某个连接的地址信息
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId"></param>
- /// <param name="lpszAddress"></param>
- /// <param name="piAddressLen"></param>
- /// <param name="pusPort"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_GetRemoteAddress(IntPtr pAgent, IntPtr connId, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
- /// <summary>
- /// 获取最近一次失败操作的错误代码
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern SocketError HP_Agent_GetLastError(IntPtr pAgent);
- /// <summary>
- /// 获取最近一次失败操作的错误描述
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr HP_Agent_GetLastErrorDesc(IntPtr pAgent);
- /// <summary>
- /// 获取连接中未发出数据的长度
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId"></param>
- /// <param name="piPending"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_GetPendingDataLength(IntPtr pAgent, IntPtr connId, ref int piPending);
- /// <summary>
- /// 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="dwFreeSocketObjLockTime"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Agent_SetFreeSocketObjLockTime(IntPtr pAgent, uint dwFreeSocketObjLockTime);
- /// <summary>
- /// 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="dwFreeSocketObjPool"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Agent_SetFreeSocketObjPool(IntPtr pAgent, uint dwFreeSocketObjPool);
- /// <summary>
- /// 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="dwFreeBufferObjPool"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Agent_SetFreeBufferObjPool(IntPtr pAgent, uint dwFreeBufferObjPool);
- /// <summary>
- /// 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="dwFreeSocketObjHold"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Agent_SetFreeSocketObjHold(IntPtr pAgent, uint dwFreeSocketObjHold);
- /// <summary>
- /// 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="dwFreeBufferObjHold"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Agent_SetFreeBufferObjHold(IntPtr pAgent, uint dwFreeBufferObjHold);
- /// <summary>
- /// 设置工作线程数量(通常设置为 2 * CPU + 2)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="dwWorkerThreadCount"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Agent_SetWorkerThreadCount(IntPtr pAgent, uint dwWorkerThreadCount);
- /// <summary>
- /// 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="bMarkSilence"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_Agent_SetMarkSilence(IntPtr pAgent, bool bMarkSilence);
- /// <summary>
- /// 获取 Socket 缓存对象锁定时间
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Agent_GetFreeSocketObjLockTime(IntPtr pAgent);
- /// <summary>
- /// 获取 Socket 缓存池大小
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Agent_GetFreeSocketObjPool(IntPtr pAgent);
- /// <summary>
- /// 获取内存块缓存池大小
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Agent_GetFreeBufferObjPool(IntPtr pAgent);
- /// <summary>
- /// 获取 Socket 缓存池回收阀值
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Agent_GetFreeSocketObjHold(IntPtr pAgent);
- /// <summary>
- /// 获取内存块缓存池回收阀值
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Agent_GetFreeBufferObjHold(IntPtr pAgent);
- /// <summary>
- /// 获取工作线程数量
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_Agent_GetWorkerThreadCount(IntPtr pAgent);
- /// <summary>
- /// 检测是否标记静默时间
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_Agent_IsMarkSilence(IntPtr pAgent);
- /**********************************************************************************/
- /***************************** TCP Agent 属性访问方法 *****************************/
- /// <summary>
- /// 置是否启用地址重用机制(默认:不启用)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="bReuseAddress"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpAgent_SetReuseAddress(IntPtr pAgent, bool bReuseAddress);
- /// <summary>
- /// 检测是否启用地址重用机制
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern bool HP_TcpAgent_IsReuseAddress(IntPtr pAgent);
- /// <summary>
- /// 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="dwSocketBufferSize"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpAgent_SetSocketBufferSize(IntPtr pAgent, uint dwSocketBufferSize);
- /// <summary>
- /// 设置心跳包间隔(毫秒,0 则不发送心跳包)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="dwKeepAliveTime"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpAgent_SetKeepAliveTime(IntPtr pAgent, uint dwKeepAliveTime);
- /// <summary>
- /// 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线)
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="dwKeepAliveInterval"></param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpAgent_SetKeepAliveInterval(IntPtr pAgent, uint dwKeepAliveInterval);
- /// <summary>
- /// 获取通信数据缓冲区大小
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpAgent_GetSocketBufferSize(IntPtr pAgent);
- /// <summary>
- /// 获取心跳检查次数
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpAgent_GetKeepAliveTime(IntPtr pAgent);
- /// <summary>
- /// 获取心跳检查间隔
- /// </summary>
- /// <param name="pAgent"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpAgent_GetKeepAliveInterval(IntPtr pAgent);
- /***************************************************************************************/
- /***************************** TCP Pull Server 组件操作方法 *****************************/
- /// <summary>
- /// 抓取数据
- /// 用户通过该方法从 Socket 组件中抓取数据
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffer">数据抓取缓冲区</param>
- /// <param name="length">抓取数据长度</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern FetchResult HP_TcpPullServer_Fetch(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length);
- /// <summary>
- /// 窥探数据(不会移除缓冲区数据)
- /// 描述:用户通过该方法从 Socket 组件中窥探数据
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffer">窥探缓冲区</param>
- /// <param name="length">窥探数据长度</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern FetchResult HP_TcpPullServer_Peek(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length);
- /***************************************************************************************/
- /***************************** TCP Pull Server 属性访问方法 *****************************/
- /***************************************************************************************/
- /***************************** TCP Pull Client 组件操作方法 *****************************/
- /// <summary>
- /// 抓取数据
- /// 用户通过该方法从 Socket 组件中抓取数据
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffer">数据抓取缓冲区</param>
- /// <param name="length">抓取数据长度</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern FetchResult HP_TcpPullClient_Fetch(IntPtr pClient, IntPtr pBuffer, int length);
- /// <summary>
- /// 名称:窥探数据(不会移除缓冲区数据)
- /// 描述:用户通过该方法从 Socket 组件中窥探数据
- /// </summary>
- /// <param name="pClient"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffer">数据抓取缓冲区</param>
- /// <param name="length">抓取数据长度</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern FetchResult HP_TcpPullClient_Peek(IntPtr pClient, IntPtr pBuffer, int length);
- /***************************************************************************************/
- /***************************** TCP Pull Client 属性访问方法 *****************************/
- /***************************************************************************************/
- /***************************** TCP Pull Agent 组件操作方法 *****************************/
- /// <summary>
- /// 抓取数据
- /// 用户通过该方法从 Socket 组件中抓取数据
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffer">数据抓取缓冲区</param>
- /// <param name="length">抓取数据长度</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern FetchResult HP_TcpPullAgent_Fetch(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length);
- /// <summary>
- /// 名称:窥探数据(不会移除缓冲区数据)
- /// 描述:用户通过该方法从 Socket 组件中窥探数据
- /// </summary>
- /// <param name="pAgent"></param>
- /// <param name="connId">连接 ID</param>
- /// <param name="pBuffer">数据抓取缓冲区</param>
- /// <param name="length">抓取数据长度</param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern FetchResult HP_TcpPullAgent_Peek(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length);
- /***************************************************************************************/
- /***************************** TCP Pull Agent 属性访问方法 *****************************/
- /***************************************************************************************/
- /***************************************************************************************/
- /***************************** TCP Pack Server 组件操作方法 *****************************/
- /***************************************************************************************/
- /***************************** TCP Pack Server 属性访问方法 *****************************/
- /// <summary>
- /// 设置数据包最大长度(有效数据包最大长度不能超过 4194303/0x3FFFFF 字节,默认:262144/0x40000)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwMaxPackSize">有效数据包最大长度不能超过 4194303/0x3FFFFF 字节,默认:262144/0x40000</param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpPackServer_SetMaxPackSize(IntPtr pServer, uint dwMaxPackSize);
- /// <summary>
- /// 设置包头标识(有效包头标识取值范围 0 ~ 1023/0x3FF,当包头标识为 0 时不校验包头,默认:0)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="usPackHeaderFlag">有效包头标识取值范围 0 ~ 1023/0x3FF,当包头标识为 0 时不校验包头,默认:0</param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpPackServer_SetPackHeaderFlag(IntPtr pServer, ushort usPackHeaderFlag);
- /// <summary>
- /// 获取数据包最大长度
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpPackServer_GetMaxPackSize(IntPtr pServer);
- /// <summary>
- /// 获取包头标识
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern ushort HP_TcpPackServer_GetPackHeaderFlag(IntPtr pServer);
- /***************************************************************************************/
- /***************************** TCP Pack Agent 组件操作方法 *****************************/
- /***************************************************************************************/
- /***************************** TCP Pack Agent 属性访问方法 *****************************/
- /// <summary>
- /// 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwMaxPackSize">有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000</param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpPackAgent_SetMaxPackSize(IntPtr pAgent, uint dwMaxPackSize);
- /// <summary>
- /// 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="usPackHeaderFlag">有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0</param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpPackAgent_SetPackHeaderFlag(IntPtr pAgent, ushort usPackHeaderFlag);
- /// <summary>
- /// 获取数据包最大长度
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpPackAgent_GetMaxPackSize(IntPtr pAgent);
- /// <summary>
- /// 获取包头标识
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern ushort HP_TcpPackAgent_GetPackHeaderFlag(IntPtr pAgent);
- /***************************************************************************************/
- /***************************** TCP Pack Client 组件操作方法 *****************************/
- /***************************************************************************************/
- /***************************** TCP Pack Client 属性访问方法 *****************************/
- /// <summary>
- /// 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="dwMaxPackSize">有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000</param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpPackClient_SetMaxPackSize(IntPtr pClient, uint dwMaxPackSize);
- /// <summary>
- /// 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0)
- /// </summary>
- /// <param name="pServer"></param>
- /// <param name="usPackHeaderFlag">有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0</param>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern void HP_TcpPackClient_SetPackHeaderFlag(IntPtr pClient, ushort usPackHeaderFlag);
- /// <summary>
- /// 获取数据包最大长度
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern uint HP_TcpPackClient_GetMaxPackSize(IntPtr pClient);
- /// <summary>
- /// 获取包头标识
- /// </summary>
- /// <param name="pServer"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern ushort HP_TcpPackClient_GetPackHeaderFlag(IntPtr pClient);
- /***************************************************************************************/
- /*************************************** 其它方法 ***************************************/
- /// <summary>
- /// 获取错误描述文本
- /// </summary>
- /// <param name="enCode"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH)]
- public static extern IntPtr HP_GetSocketErrorDesc(SocketError enCode);
- /// <summary>
- /// 调用系统的 ::GetLastError() 方法获取系统错误代码
- /// </summary>
- /// <returns></returns>
- public static int SYS_GetLastError()
- {
- return Marshal.GetLastWin32Error();
- }
- /// <summary>
- /// 调用系统的 ::WSAGetLastError() 方法获取通信错误代码
- /// </summary>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern int SYS_WSAGetLastError();
- /// <summary>
- /// 调用系统的 setsockopt()
- /// </summary>
- /// <param name="sock"></param>
- /// <param name="level"></param>
- /// <param name="name"></param>
- /// <param name="val"></param>
- /// <param name="len"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern int SYS_SetSocketOption(IntPtr sock, int level, int name, IntPtr val, int len);
- /// <summary>
- /// 调用系统的 getsockopt()
- /// </summary>
- /// <param name="sock"></param>
- /// <param name="level"></param>
- /// <param name="name"></param>
- /// <param name="val"></param>
- /// <param name="len"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern int SYS_GetSocketOption(IntPtr sock, int level, int name, IntPtr val, ref int len);
- /// <summary>
- /// 调用系统的 ioctlsocket()
- /// </summary>
- /// <param name="sock"></param>
- /// <param name="cmd"></param>
- /// <param name="arg"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern int SYS_IoctlSocket(IntPtr sock, long cmd, IntPtr arg);
- /// <summary>
- /// 调用系统的 ::WSAIoctl()
- /// </summary>
- /// <param name="sock"></param>
- /// <param name="dwIoControlCode"></param>
- /// <param name="lpvInBuffer"></param>
- /// <param name="cbInBuffer"></param>
- /// <param name="lpvOutBuffer"></param>
- /// <param name="cbOutBuffer"></param>
- /// <param name="lpcbBytesReturned"></param>
- /// <returns></returns>
- [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
- public static extern int SYS_WSAIoctl(IntPtr sock, uint dwIoControlCode, IntPtr lpvInBuffer, uint cbInBuffer,
- IntPtr lpvOutBuffer, uint cbOutBuffer, uint lpcbBytesReturned);
- }
- }
|