0

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

通信在我们的暂存环境中运行良好。该问题发生在我们的生产环境中。

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

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

当 delphi 应用程序读取缓冲区时,它只读取缓冲区上的前几个数据包,而不是完整的响应。

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

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

4

1 回答 1

2

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

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

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

于 2014-05-15T19:16:30.873 回答