私はから~までTIdTCPClientから多くの暗号化されたRawByteStringデータ(最大500レコード/秒)を転送するための最も速い(株式市場アプリケーション、非常にタイムクリティカルな)ソリューションを探しています。TIdTCPServer/TIdTCPClient:RawByteStringを転送する最も良い方法は?
これを行うにはどうすればよいですか?
ありがとうございます!
編集:私のプロジェクトで
私は、文字列の暗号化にn'Softwareライブラリを使用する必要があります。最速の暗号化メソッドはRawByteStringを返します。理論的には、私は暗号化された文字列のコードページを設定し、それをUTF8エンコードして転送する必要がありますが、すべての試みは失敗しました。
だから私には最も論理的なように見えた:
サーバー:
var
rbs: RawByteString;
begin
rbs := EncryptString(AInput, DEFAULT_ENCRYPTION_KEY);
SetCodePage(rbs, 65001, true);
AContext.Connection.IOHandler.WriteLn(rbs, IndyTextEncoding_UTF8);
...
end;
クライアント:UTF-8文字列は単純に間違っているよう
var
rbs: string;
Output: string;
begin
rbs := IdTCPClient1.IOHandler.ReadLn(IndyTextEncoding_UTF8);
Output := DecryptString(rbs, DEFAULT_ENCRYPTION_KEY);
...
end;
まあ、それはそうあなたが望むコンポーネントを選択してください使用すると、あまりにも多くのオプションがありません、今はありますか?私たちがあなたのためにドキュメントを読んだり、Googleがあなたのために検索したりしたいのですか? –
バイナリで暗号化された 'RawByteString'をUTF-8文字列として転送することは、速さに関係なく、間違っています。 Indyでバイナリデータを転送する正しい方法は、 'TIdBytes'または' TStream'を使うことです。 'IOHandler'には両方の読み書き方法があります。 Indyの 'RawToBytes()'と 'BytesToRaw()'関数や 'TIdMemoryBufferStream'クラスを見てください。 –
@Remy Lebeauありがとうございました、これはまさに私が探しているものです! –