德尔福7& indy 9 Buffer Reader问题,不读取所有数据包

时间:2014-05-15 17:54:30

标签: delphi sockets tcp indy-9

我有一个连接到Java Server应用程序的Delphi应用程序(使用indy 9在Delphi 7中开发)。

通信在我们的暂存环境中完美运行。问题发生在我们的生产环境中。

我进行了TCP转储并能够跟踪所有数据包,所有数据都传送到运行Delphi应用程序的网络接口卡上。我们的MTU默认设置为1500

总数据包大小平均为15kb。

当delphi应用程序正在读取缓冲区时,它只读取缓冲区中的第一个数据包,而不是完整的响应。

我能够看到输出到从缓冲区读取的数据的文本文件。

升级到indy 10是不可能的,我们正在将所有应用程序迁移到Java环境。

1 个答案:

答案 0 :(得分:2)

我不知道delphi / Indy-9。以下只是对TCP应用程序的观察。

在基于TCP的应用程序中,如果交换的数据没有应用程序级别标记(开始和结束),则通常遵循的一种方法是将数据长度编码为2或4个字节,并将这些字节前置到实际数据中。接收此类数据的TCP应用程序应读取长度字节并继续读取,直到许多字节到达,然后进一步处理。

在您的情况下 - 可能是接收应用程序将前几个字节解释为长度但实际上不是。但有效载荷。价值可能很高。因此,应用程序没有进一步处理,因为它还没有收到它想到的那么多字节。