18,356
社区成员
发帖
与我相关
我的任务
分享
1) DisconnectSilenceConnections():// 断开超过指定时长的静默连接
2) GetSilencePeriod():// 获取某个连接静默时间(毫秒)
3) SetMarkSilence():// 设置是否标记静默时间
4) IsMarkSilence():// 检测是否标记静默时间
> 增加 UdpCast 通信组件:
/* 1) 通知接口方法: */
OnPrepareConnect(IClient* pClient, SOCKET socket)
OnConnect(IClient* pClient)
OnSend(IClient* pClient, const BYTE* pData, int iLength)
OnReceive(IClient* pClient, const BYTE* pData, int iLength)
OnClose(IClient* pClient)
OnError(IClient* pClient, EnSocketOperation enOperation, int iErrorCode)
/* 2) 主要操作方法: */
Start(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE /*该参数被忽略*/)
Stop()
Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)
Send(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)
SendPackets(const WSABUF pBuffers[], int iCount)
3、增加 UdpCast 使用示例:TestUDPCast
1) IClient/IServer/IAgent 增加方法 SendPackets(pBuffers[], iBufferCount)
2) 对于 TCP 组件 - 顺序发送所有数据包
3) 对于 UDP 组件 - 把所有数据包组合成一个数据包发送(总长度不能大于 UDP 包最大长度)
2、小文件发送方法 SendSmallFile()
1) TCP 组件增加方法 SendSmallFile(lpszFileName, pHead, pTail)
2) 通过 pHead 和 pTail 参数,可以分别在文件数据的头部和尾部加入自定义数据
3) SendSmallFile() 只能发送 4096 KB 以内大小的文件
3、HPSocket.dll 和 HPSocket4C.dll 增加以下导出方法
1) SYS_WSAGetLastError():调用系统的 WSAGetLastError()
2) SYS_SetSocketOption():调用系统的 setsockopt()
3) SYS_GetSocketOption():调用系统的 getsockopt()
4) SYS_IoctlSocket() :调用系统的 ioctlsocket()
5) SYS_WSAIoctl() :调用系统的 WSAIoctl()
------------------------------------------------------------------------------------------------
/* 1) 通知接口方法:*/
OnPrepareConnect(CONNID dwConnID, SOCKET socket)
OnConnect(CONNID dwConnID)
OnSend(CONNID dwConnID, const BYTE* pData, int iLength)
OnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //(Push 模型)
OnReceive(CONNID dwConnID, int iLength) //(Pull 模型)
OnClose(CONNID dwConnID)
OnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
OnAgentShutdown()
/* 2) 主要操作方法:*/
Start(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE)
Stop()
Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)
Send(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)
Disconnect(CONNID dwConnID, BOOL bForce = TRUE)
Fetch(CONNID dwConnID, BYTE* pData, int iLength) //(Pull 模型)
5、增加 TcpAgent / TcpPullAgent 使用示例:
1) TcpServer:TCP 通信服务端组件,支持 PUSH/PULL 模型
2) TcpClient:TCP 通信客户端组件,支持 PUSH/PULL 模型
3) TcpAgent :TCP 通信 Agent 组件,支持 PUSH/PULL 模型
4) UdpServer:UDP 通信服务端组件,支持 PUSH 模型
5) UdpClient:UDP 通信客户端组件,支持 PUSH 模型
5、HPSocket4J 的使用方法(以 TcpAgent 为例):
/* 0: 应用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar */
/* 1: 创建通信组件对象 */
TcpAgent agent = TcpAgent.create(Mode.PUSH);
/* 2: 设置回调函数对象 */
// (可选)
agent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl());
// (可选)
agent.setCallBackOnConnect(new OnConnectImpl());
// (必须)PUSH 模型需要设置 OnReceive 回调函数对象
agent.setCallBackOnReceive(new OnReceiveImpl());
// (必须)PULL 模型需要设置 OnPullReceive 回调函数对象
// agent.setCallBackOnPullReceive(new OnPullReceiveImpl());
// (可选)
agent.setCallBackOnSend(new OnSendImpl());
// (必须)
agent.setCallBackOnClose(new OnCloseImpl());
// (必须)
agent.setCallBackOnError(new OnErrorImpl());
// (可选)
agent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());
/* 3:启动通信组件 */
agent.start("127.0.0.1", false);
/* 4:连接服务器 */
agent.connect("localhost", (short)5555, pdwConnID);
/* 5:处理通信数据 */
// 响应 OnReceive / OnPullReceive 事件接收数据
// 使用 agent.send(dwConnID, data, data.length) 发送数据
/* 6:关闭通信组件 */
agent.stop();
/* 7:销毁通信组件 */
TcpAgent.destroy(agent);
6、增加示例工程 TestEcho-4J,展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能测试示例)
1)PACK - 打包模式(默认):尽量把多个发送操作的数据组合在一起发送,增加传输效率
2)SAFE - 安全模式:尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出
3)DIRECT - 直接模式:对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合
2、Server 和 Agent 组件提供以下两种数据接收策略:
1)SERIAL - 串行模式(默认):顺序触发同一连接的 OnReceive 和 OnClose/OnError 事件
2)PARALLEL - 并行模式:在不同的通信线程中同时触发同一连接的 OnReceive 和 OnClose/OnError 事件
------------------------------------------------------------------------------------------------牛B了,码农求带 我的软件用的就是HPsocket, 已经安装在30万终端上,日活跃20万,该库十分稳定,从未出错,我是做网吧软件的,2000多家网吧使用(还不包括破解用户)。