我正在使用 Indy 客户端来读取服务器发送给我(客户端)的消息。它一口气向我发送了 512 字节的数据。这 512 字节的数据由两种数据类型(Word 和 String)组成。例如,它发送 2 个字节的字,然后再发送 2 个字节的字,然后是 50 个字节的字符串,依此类推。我正在尝试以下代码来解决这个问题:
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 : 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));
那工作正常,但我必须在循环中读取所有数据时保持连接打开。如果在连接之间,我会丢失所有内容,并且必须再次从服务器请求整个包。