TidTcpClient ReadBytes 方法不返回数据

TidTcpClient ReadBytes method not returning data

我的客户端收到字符串,其中字符串的前 4 个字符定义消息的长度。

示例字符串:0034PDCS00001700kg00000000kg00001700kg

我发现当使用 TidTcpClient.ReadString 方法或 ReadBytes 方法时读取被阻止,即使有足够的数据。

我不确定我做错了什么。有人可以给我建议吗?

FClient.IOHandler.ReadBytes(Buffer, 4, False);// this gets the length OK
len := BytesToString(Buffer).ToInteger; 
FClient.IOHandler.ReadBytes(Buffer, len, True);// this blocks and doesn't move on
sReceive := BytesToString(Buffer);

当我测试时,您展示的内容对我来说非常有效。长度和数据被正确读取,没有阻塞。所以发生了其他事情,要么接收到的数据不是您在此处显示的数据,要么问题出在您未显示的另一段代码中。

无论如何,您可以通过使用 ReadString() 而不是 ReadBytes() 来读取两个值来简化您显示的代码:

len := FClient.IOHandler.ReadString(4).ToInteger; 
sReceive := FClient.IOHandler.ReadString(len);