我的客户端接收字符串,其中字符串的前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);
答案 0 :(得分:1)
当我测试时,你所展示的作品对我来说非常合适。无阻塞地正确读取长度和数据。所以其他事情正在发生,要么收到的数据不是你在这里显示的,要么问题发生在你没有展示的另一段代码中。
在任何情况下,您都可以使用ReadString()
代替ReadBytes()
来简化您显示的代码,以便同时阅读这两个值:
len := FClient.IOHandler.ReadString(4).ToInteger;
sReceive := FClient.IOHandler.ReadString(len);