找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 中文模块 Demo
查看: 1038|回复: 0

连接方式

[复制链接]
发表于 2022-3-1 18:00:51 | 显示全部楼层 |阅读模式
连接方式
HP-Socket 所有组件的通信过程都是异步的,如:调用组件的 Send() 方法会立即返回,
稍后监听器会接收到 OnSend() 事件获知发送了多少数据,或者会接收到 OnClose() 事件可
获知发送失败原因。
但 HP-Socket 的 IClient 和 IAgent 组件向服务器发起连接的过程可以是同步或异步的。
同步是指组件的连接方法(IClient - Start(),IAgent - Connect())等到建立连接成功或失败了
再返回(返回 TRUE 或 FALSE)。
异步连接是指组件的连接方法 Start() / Connect() 会立即返回,如果 Start() / Connect()
返回成功(TRUE)则稍后会接收到 OnConnect() 或 OnClose() 事件,收到前者则说明连接
成功,收到后者则说明连接失败。注意:如果 Start() / Connect() 返回失败(FALSE)则稍后
不一定能接收到 OnClose() 事件。因此,对于异步连接也必须检查 Start() / Connect() 的返回
值,当返回失败(FALSE)则立即可以断定连接失败。
 IClient 建立连接方法:
BOOL Start(lpszRemoteAddress, usPort, bAsyncConnect = TRUE,
lpszBindAddress = nullptr, usLocalPort = 0)
参数 bAsyncConnect 指示是否采用异步连接方式(默认:TRUE),如果 Start()方法返回
失败可以调用组件的 GetLastError() 和 GetLastErrorDesc() 方法获取错误代码和错误描述。
如 果 Start() 方 法 返 回 成 功 可 以 调 用 组 件 的 GetConnectionID() 方 法 获 取 当 前 连 接 的
Connection ID。
注意:IUdpCast 组件的 Star()方法忽略 bAsyncConnect 参数。
 IAgent 建立连接方法:
BOOL Start(lpszBindAddress = nullptr, bAsyncConnect = TRUE)
BOOL Connect(lpszRemoteAddress, usPort, pdwConnID = nullptr,
pExtra = nullptr, usLocalPort = 0)
Start() 方法启动 IAgent 组件并指定连接方式,参数 bAsyncConnect 指示是否采用异步
连接方式(默认:TRUE),如果 Start() 方法返回失败可以调用组件的 GetLastError() 和
GetLastErrorDesc() 方法获取错误代码和错误描述。注意:Start() 方法在整个通信周期中只
需调用 1 次。
Connect() 方法与指定服务器建立连接,参数 pdwConnID 用来获取本连接的 Connection
ID(默认:nullptr,不获取),参数 pExtra 设置“连接绑定”数据(默认:nullptr,不设置),
如果 Connect() 方法返回失败可以调用 Windows API 函数 ::GetLastError() 获取 Windows
错误代码;如果设置了 pExtra,这时也要手工释放。
无论是同步或异步连接,成功完成连接的过程中都会先后触发监听器的两个事件:
✓ OnPrepareConnect(pSender, dwConnID, socket)
✓ OnConnect pSender, dwConnID)
其中 OnPrepareConnect(pSender, dwConnID, socket) 在发起连接前触发,socket 是本地
SOCKET 句柄,可以在该事件中通过 setsockopt() / WSAIoctl() 等方法设置 SOCKET 选项。
OnConnect(pSender, dwConnID) 则在连接建立成功后触发。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

QQ|Archiver|手机版|小黑屋| HPsocket-国产高性能通讯框架

( 豫ICP备19038015号-1 ) GMT+8, 2024-11-21 18:37 Powered by Discuz! X3.5 *// |网站地图

快速回复 返回顶部 返回列表