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

how much size of data can be send in tidtcpclient in delphi xe7

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

TCP套接字是数据流,传输的数据长度没有限制。对于固定长度的数据,客户端和服务器必须知道流何时结束,方法是在发送实际数据之前先发送长度信息,或者使用数据结束符号/终止符序列。您还可以发送一个 'endless' 流,例如实时音频/视频数据,它会一直持续到一侧断开连接。

您可以发送的数据在理论上没有大小限制。限制是因为系统 resources/processing 功率、带宽可用性,当然还有发送所需的时间。

对于移动设备,系统资源将是内存、cpu 电源和数据可用性(每数据成本),其他平台很可能也是如此。影响性能的另一个资源是开发人员;他编写的应用程序最差,它的性能最差。

带宽可用性将决定数据块的发送速度,这直接影响它所花费的时间。谁愿意永远等待,对吧?

还有一点很重要,那就是收件人。收件人的耐心程度以及他拥有多少资源也会影响您可以向他发送多少数据。

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

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

鉴于您可能不知道收件人拥有多少资源,明智的做法是始终将大量数据分解成更小的数据块。不幸的是,这是您必须测试以确定有多大的东西。还要记住将用于发送它的技术。例如,以太网有一定的数据包大小,如果数据被分解成太小的大小,可能会导致过多的开销。诀窍是尝试找到平衡点。不要太担心,但请仔细阅读。