TidTcpClient ReadBytes方法不返回数据

时间:2015-07-24 22:17:01

标签: tcp client indy

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

示例字符串:0034PDCS00001700kg00000000kg00001700kg

  • 邮件长度为34
  • 消息为PDCS00001700kg00000000kg00001700kg

我发现即使有足够的数据,在使用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);

1 个答案:

答案 0 :(得分:1)

当我测试时,你所展示的作品对我来说非常合适。无阻塞地正确读取长度和数据。所以其他事情正在发生,要么收到的数据不是你在这里显示的,要么问题发生在你没有展示的另一段代码中。

在任何情况下,您都可以使用ReadString()代替ReadBytes()来简化您显示的代码,以便同时阅读这两个值:

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