【发布时间】:2017-02-15 14:50:17
【问题描述】:
我正在开发一个 TCP 客户端-服务器应用程序。
我正在尝试获取我发送到客户端的数据包的压缩大小,以便我可以将该大小与未压缩的数据大小进行比较,并获取有关获得的压缩率的统计信息。
在客户端。我可以通过将发送/接收数据的大小与我从TIdCompressionIntercept 的 OnSend/OnReceive 事件中获得的大小进行比较来获取该信息。只是获取这些事件处理程序的ABuffer 参数的长度。
但是,在服务器端,TIdServerCompressionIntercept 没有要挂钩的那些事件。
所以问题。如何获取服务器发送/接收的数据包的压缩大小,以便将这些大小与这些数据包的原始数据大小进行比较?
谢谢。
客户端代码示例:
var
FRawSentSize ,
FComrpessedSentSize ,
FRawReceivedSize ,
FCompressedReceivedSize : UInt64;
function TFrom1.SendAndReceive( const ToSend: String ): String;
begin
TCPClient.IOHandler.WriteLn( ToSend );
Inc( FRawSentSize, Length( ToSend ) );
Result := TCPClient.IOHandler.ReadLn;
Inc( FRawReceivedSize, Length( Result ) );
end;
function TForm1.CompressorSend( ASender: TIdConnectionIntercept; var ABuffer: TIdBytes );
begin
Inc( FComrpessedSentSize, Length( ABuffer ) );
end;
function TForm1.CompressorReceive( ASender: TIdConnectionIntercept; var ABuffer: TIdBytes );
begin
Inc( FCompressedReceivedSize, Length( ABuffer ) );
end;
【问题讨论】: