# 2.4.1接口描述


Client组件接口的继承层次结构如图2.4.1-1所示,其中,ITcpClient、IUdpClient和IUdpCast继承于IClient,ITcpPullClient和ITcpPackClient则继承于ITcpClient。主要接口方法如表2.4.1-1所示,其它接口方法请参考**Src/SocketInterface.h**文件的相关注释:
**IClient**
~~~
Start() 启动组件
Stop() 关闭组件
Connect() 连接服务器
Send() 发送数据
SendPackets() 发送多组数据
PauseReceive() 暂停接收数据
HasStarted() 检查通信组件是否已启动
GetState() 获取通信组件当前状态
GetConnectionID() 获取该组件对象的CONNID
GetLocalAddress() 获取连接的本地地址
GetRemoteHost() 获取连接的远程主机
GetLastError() 获取最近一次失败操作的错误代码
GetLastErrorDesc() 获取最近一次失败操作的错误描述
~~~
**ITcpClient**
~~~
SendSmallFile() 发送小文件
SetSocketBufferSize() 设置通信数据缓冲区大小
SetKeepAliveTime() 设置心跳检测包发送间隔
SetKeepAliveInterval() 设置心跳检测重试包发送间隔
~~~
**ITcpPullClient**
~~~
Fetch() 拉取数据
Peek() 窥探数据
~~~
**ITcpPackClient**
~~~
SetMaxPackSize() 设置最大包长限制
SetPackHeaderFlag() 设置包头校验标识
~~~
**IUdpClient**
~~~
SetMaxDatagramSize() 设置数据报文最大长度
SetDetectAttempts() 设置检测重试次数
SetDetectInterval() 设置检测包发送间隔
~~~
**IUdpCast**
~~~
SetMaxDatagramSize() 设置数据报文最大长度
SetReuseAddress() 设置是否启用地址重用机制
SetCastMode() 设置传播模式(组播或广播)
SetMultiCastTtl() 设置组播报文TTL
SetMultiCastLoop() 设置是否启用组播环路
GetRemoteAddress() 获取当前数据包的远程地址
~~~
Client监听器接口的继承层次结构如图2.4.1-2所示,其中,ITcpClientListener和IUdpClientListener继承于IClientListener,接口回调事件如表2.4.1-2所示:
**ISocketListenerT**
~~~
OnHandShake() 握手完成 握手完成时触发
OnSend() 数据已发送 数据发送成功后触发
OnReceive() [PUSH] 数据到达(PUSH / PACK) 接收到数据时触发
OnReceive() [PULL] 数据到达(PULL)接收到数据时触发
OnClose() 连接关闭 连接正常或异常关闭时触发
~~~
**IClientListenerT**
~~~
OnPrepareConnect() 准备建立连接 建立连接前触发
OnConnect() 成功建立连接 成功建立连接后触发
~~~
# 2.4.2工作流程

图2.4.2-1展示了服务端、客户端应用程序与Client组件的交互流程:
1. 客户端应用程序调用Start() 方法向服务端应用程序发起连接请求,如果连接成功则返回TRUE并且会先后接收到OnPrepareConnect、OnConnect和OnHandshake事件。
2. 客户端应用程序调用Send() 方法向服务端应用程序发出数据后,客户端应用程序将收到OnSend事件。
3. 服务端应用程序向客户端应用程序发送数据时,客户端应用程序将收到OnReceive事件。
4. 断开连接时,客户端应用程序将收到OnClose事件。
5. 客户端应用程序调用Stop() 方法关闭Client组件,如果调用成功则返回TRUE并收到OnClose事件。
