代码之家  ›  专栏  ›  技术社区  ›  Work 2 Enjoy - Enjoy 2 Work

delphixe7中tidtcpclient可以发送多少数据

  •  0
  • Work 2 Enjoy - Enjoy 2 Work  · 技术社区  · 9 年前

    我正在使用DelphiXE7开发移动应用程序。我使用TIdtcpClient组件与服务器应用程序交互。我需要知道Android手机;iOs移动应用程序,我一次可以向服务器发送的最大数据量是多少。或者这取决于互联网的速度。请帮帮我

    2 回复  |  直到 9 年前
        1
  •  5
  •   mjn anonym    9 年前

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

        2
  •  1
  •   Blurry Sterk    9 年前

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

    在移动设备的情况下,系统资源将是内存、cpu功率和数据可用性(每数据的成本),这很可能也适用于其他平台。影响性能的另一个资源是开发人员;他写的应用程序越差,它的性能就越差。

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

    还有一点很重要,那就是接受者。接收者的耐心程度和他拥有的资源也会影响你可以向他发送多少数据。

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

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

    看到你可能不知道接收者有多少资源,明智的做法是总是将大量数据分成小块。不幸的是,这是一个你必须测试的东西,以确定有多大。此外,请记住将用于传递信息的技术。例如,以太网具有特定的数据包大小,如果数据被拆分成太小的大小,可能会导致太多的开销。诀窍是设法找到平衡。不要太担心,但一定要仔细阅读。