2017-02-15 25 views
0

Я разрабатываю приложение TCP Client-Server.Как получить сжатый размер данных с TIdTCPServer?

Я пытаюсь получить сжатый размер пакетов, которые я отправляю клиенту, поэтому я могу сравнить этот размер с несжатым размером данных и получить статистику об полученном коэффициенте сжатия.

На стороне клиента. Я могу получить эту информацию, сравнивая размер отправляемых/полученных данных с размером, который я получаю от событий OnSend/OnReceive от TIdCompressionIntercept. Просто получить длину параметра 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; 

ответ

0

TIdServerCompressionIntercept не перехватывать, что делает фактическую работу, так что именно поэтому он не имеет никаких событий.

Когда новый клиент подключается к серверу, TIdServerCompressionIntercept создаст объект TIdCompressionIntercept, который будет присвоен объекту AContext.Connection.IOHandler.Intercept. Этот объект выполняет фактическую работу, как и в клиентском коде. Обработчик событий вашего сервера OnConnect или OnExecute может программировать назначение обработчиков событиям этого объекта по мере необходимости.

+0

Теперь это решение! Большое спасибо Gambit! – Avatar

 Смежные вопросы

  • Нет связанных вопросов^_^