Indyクライアントを使用して、サーバーが私に送信しているメッセージ(クライアント)を読み取っています。私は512バイトのデータを一度に送信します。この512バイトのデータは、2つのデータ型(WordおよびString)で構成されています。たとえば、2バイトのWordを送信し、次に2バイトのWordを送信し、次に50バイトのStringなどを送信します。DelphiでIndy Clientを使用しているサーバーからすべてのバイトを読み取る方法は?
var BufferArray : Array[0..512] of Byte;
if IdTCPClient1.IOHandler.InputBufferIsEmpty then
begin
if IdTCPClient1.IOHandler.CheckForDataOnSource(1000) then
begin
Edit1.Text := idtcpclient1.IOHandler.ReadBytes(BufferArray ,512, true);
end;
end;
私はラインEdit1.Text上のエラー取得しています:私は、この問題に対処するために、次のコードをしようとしています=のidtcpclient1.IOHandler.ReadBytes(BufferArray、512、true)を、エラー:実際のパラメータと正式なvarパラメータの型は同じでなければなりません。
私が使用しているアプローチは正しいですか? Edit1.Textに512バイト全体を保存して、そのデータで何をしたいのかを行います。サーバーから512バイトすべてを手に入れてください。
更新:交互アプローチ
私は単語や文字列を読み取るために、このアプローチを使用しています
WordArray [i]のような文字列のための
WordArray : array[0..5] of word;
if IdTCPClient1.IOHandler.InputBufferIsEmpty then
begin
if IdTCPClient1.IOHandler.CheckForDataOnSource(1000) then
begin
i := 0;
while i < 6 do //Read all the words
begin
//Fill WORD data in array
WordArray[i] := (IdTCPClient1.Socket.ReadWord(True));
end;
end;
end;
同様のアプローチ値:=(IdTCPClient1を。 Socket.ReadString(50));
うまく動作しますが、ループ内のすべてのデータを読み取っている間は接続を開いたままにしておく必要があります。接続の間にあれば、私はすべてを失い、サーバーからパッケージ全体を再度要求しなければなりません。
'BufferArray'に動的配列を使用し、宣言を' var BufferArray:TBytes; 'に変更してください。 – TLama
はい、同じでした。出来た。ありがとう。今私はさらに問題があります。このBufferArrayをどのように反復処理できますか?私はそれを文字列配列にすべて保存したい。 –
@TLama - 私の質問が更新されました。私の新しいアプローチは正しいのですか? –