Delphi 7 和 indy 9 缓冲区读取器问题,未读取所有数据包



我有一个Delphi应用程序(在Delphi 7利用indy 9开发)连接到Java服务器应用程序。

通信在我们的Staging环境中工作得很好。这个问题发生在我们的生产环境中。

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

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

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

我可以看到,从缓冲区读取的数据输出到一个文本文件。

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

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

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

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

最新更新