私はTCP Client-Serverアプリケーションを開発しています。TIdTCPServerから圧縮データサイズを取得するには?
私はクライアントに送信するパケットの圧縮サイズを取得しようとしています。そのサイズを圧縮されていないデータサイズと比較し、得られた圧縮率に関する統計を取得できます。
クライアント側。 OnSend/OnReceiveイベントのサイズと送受信したデータのサイズを比較すると、TIdCompressionIntercept
の情報が得られます。これらのイベントハンドラのパラメータの長さを取得するだけです。
しかし、サーバー側では、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;
これが解決策です。ありがとうたくさんのガンビット! – Avatar