DIOCP3 – 关于接收数据

DIOCP3支持两种方式接收数据,

 

第一种是原始的流数据, 最通用的一种方式,客户端发啥,这边就收到啥。需要自己处理粘包问题。

可以在TCilentContext或者TIocpTcpServer的OnRecvBuffer中处理, 如果Errcode = 0可以进行收到数据的处理

下面这两个都会触发

TIocpClientContext

procedure OnRecvBuffer(buf: Pointer; len: Cardinal; ErrCode: WORD); override;

 

TIocpTcpServer

property OnDataReceived: TOnDataReceived read FOnDataReceived write
        FOnDataReceived;

 

第二种是编码器和解码器的方式。该方式进行了一次封装,在OnRecvBuffer中后,会对数据进行缓存存放,然后调用解码器进行解码数据, 如果解码成功会用IocpTask/或者QWokers把数据对象投递到逻辑线程进行处理<常说的通信线程和工作线程分离的模式>。

 

TIOCPCoderClientContext

procedure dataReceived(const pvDataObject:TObject); override;

 

在这个函数下面可以不用去管粘包问题。接受到的是你客户端发送过来的对象。

分享到: