Indyクライアントを使用して、サーバーが私(クライアント)に送信しているメッセージを読み取っています。512バイトのデータを一度に送信します。この512バイトのデータは、2つのデータ型(WordとString)で構成されています。たとえば、2バイトのWordを送信し、次に2バイトのWordを送信し、次に50バイトのStringを送信します。私はこの問題に対処するために次のコードを試しています:
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パラメータと正式なvarパラメータのタイプは同じである必要があります。
私が使用しているのは正しいアプローチですか。Edit1.Textに512バイト全体を保存したいので、そのデータでやりたいことは何でもします。サーバーから512バイトすべてを取得するのを手伝ってください。
更新:代替アプローチ
私はこのアプローチを使用して単語と文字列の値を読み取ります
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;
次のような文字列に対する同様のアプローチ
WordArray [i]:=(IdTCPClient1.Socket.ReadString(50));
これは正常に機能していますが、ループ内のすべてのデータを読み取る間、接続を開いたままにする必要があります。接続の間に行くと、すべてが失われ、サーバーにパッケージ全体を再度要求する必要があります。