Je développe une application TCP Client-Serveur. J'essaie d'obtenir la taille compressée des paquets que j'envoie au client afin que je puisse comparer cette taille avec la taille de données non compressée et obtenir des statistiques sur le taux de compression obtenu.Comment obtenir la taille des données compressées à partir d'un TIdTCPServer?
Du côté client. Je peux obtenir cette information en comparant la taille des données envoyées/reçues avec la taille que je reçois des événements OnSend/OnReceive de TIdCompressionIntercept
. Obtenir simplement la longueur du paramètre ABuffer
de ces gestionnaires d'événements. Mais, côté serveur, le TIdServerCompressionIntercept n'a pas ces événements à accrocher.
Donc la question. Comment puis-je obtenir la taille compressée des paquets envoyés/reçus par le serveur, donc je peux comparer ces tailles avec la taille des données brutes de ces paquets?
Merci.
exemple de code côté client:
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;
Maintenant c'est une solution! Merci beaucoup Gambit! – Avatar