Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 德尔福7&;indy 9缓冲区读取器问题,未读取所有数据包_Delphi_Sockets_Tcp_Indy 9 - Fatal编程技术网

Delphi 德尔福7&;indy 9缓冲区读取器问题,未读取所有数据包

Delphi 德尔福7&;indy 9缓冲区读取器问题,未读取所有数据包,delphi,sockets,tcp,indy-9,Delphi,Sockets,Tcp,Indy 9,我有一个连接到Java服务器应用程序的Delphi应用程序(使用indy 9在Delphi 7中开发) 在我们的登台环境中,通信工作正常。问题发生在我们的生产环境中 我做了一个TCP转储,能够跟踪所有的数据包,所有的数据都被传送到运行Delphi应用程序的网络接口卡上。我们的MTU设置为默认值1500 数据包的总大小平均为15kb 当delphi应用程序读取缓冲区时,它只读取缓冲区上的前几个数据包,而不读取完整响应 我能够看到从缓冲区读取的数据的文本文件的on输出 升级到indy 10是不可能的

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

在我们的登台环境中,通信工作正常。问题发生在我们的生产环境中

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

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

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

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


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

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

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


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

什么代码实际接收数据包并构造要处理的消息?Delphiapplication@user3641972当前位置这不是EWit的要求。读取数据包并重构消息的应用程序代码是什么样子的?请显示使用Indy读取数据包的实际代码。此外,请出示实际数据包本身,以验证您是否使用了正确的代码来读取数据包。您忽略了提问。在没有看到您的实际代码或它试图实现的协议的情况下,我们只能推测代码为什么没有读取完整的数据包。我的猜测是,您只是使用了错误的协议读取代码,因此没有读取您应该读取的内容并使自己失去同步。您完全正确-协议失败。我现在要投票,因为这也是我的猜测。