在delphi xe7中tidtcpclient可以发送多少大小的数据

时间:2015-02-03 05:20:22

标签: android delphi firemonkey indy delphi-xe7

我使用Delphi XE7开发移动应用程序。我使用TIdtcpClient组件与Server应用程序进行交互。我需要知道Android手机和耳机iOs移动应用程序,我可以一次发送到服务器的最大数据大小是多少。或者它取决于互联网的速度。请帮帮我

2 个答案:

答案 0 :(得分:5)

TCP套接字是数据流,传输数据的长度是无限的。对于具有固定长度的数据,客户端和服务器必须知道流何时结束,或者通过在发送实际数据之前首先发送长度信息,或者通过使用数据结束符号/终止符序列。您还可以发送“无休止的”#39;流,例如直播音频/视频数据,一直持续到一方断开连接。

答案 1 :(得分:1)

您可以发送的数据没有理论大小限制。限制是因为系统资源/处理能力,带宽可用性以及发送所需的时间。

移动设备的系统资源将是内存,CPU功率和数据可用性(每个数据的成本),因为它很可能也适用于其他平台。另一个影响性能的资源是开发人员;他写的应用程序最糟糕的是它将执行的最差。

带宽可用性将决定发送数据块的速度,这会直接影响所需的时间。谁想要永远等待,对吧?

另一件重要的事情是收件人。收件人的耐心程度以及他拥有多少资源也会影响您可以发送给他的数据量。

因此,如果您有足够的时间和资源,那么您将能够发送大量数据。

TidTCPClient所属的Indy套件使用TidBytes作为内存数据容器,其中存储了一个字节数组(构成数据的字节)。这些TidBytes数组用于保存您发送的数据或您收到的数据。发送或接收时,它们将被发送到TidTCPClient。 TidBytes阵列的大小再次受发送器/接收器资源的限制。如果这导致问题,那么您可以将数据分成更小的块然后一个接一个地发送它们。只要您向收件人指示每个块的大小,如mjm所述,并且在分段发送的情况下,您还必须指示哪个段在完整数据流中的位置。向收件人指示的方法是将数据大小作为字节,字或整数的前缀添加到您将发送的整个包的开头,并且只要服务器知道要读取第一个字节,单词或整数他将知道该指标将跟随多少数据,从而知道预期有多少数据作为实际可用数据。

看到您可能不知道收件人有多少资源,明智的做法是将大量数据分成更小的块。不幸的是,你需要测试一下,以确定有多大。还要记住将用于发送它的技术。例如,以太网具有某些数据包大小,如果数据被分解为太小的大小,则可能导致过多的开销。诀窍是尝试找到平衡点。不要太担心,但要阅读它。