【发布时间】:2012-03-27 10:10:46
【问题描述】:
一个非常简单的问题,我似乎找不到明确的答案。
我有一个经典的 TCP Indy 服务器。我分块发送数据。每个数据包以 1 个或多个块的形式发送。当它到达时,每个数据包都会触发一次或多次 OnExecute。不止一个客户端可以在任何给定时间发送数据。我如何知道我在 OnExecute 中为哪个客户端/数据包接收数据?我知道这可能是一个微不足道的问题,但我想得到一个明确的答案。
【问题讨论】:
-
这里是delphigeist.com/2010/09/… 的一种方法示例,请注意,这是一项“匆忙”的工作,您可以改进很多,但这只是一个开始。
-
为什么要分块发送数据?这正是 TCP 为您做的事情?您不必关心这些低级问题。
-
如果 TCP 为我这样做,我也会遇到同样的问题。 OnExecute 被触发不止一次。另外,如果您要发送一个非常大的文件怎么办。您是否只需将其加载到单个块中即可。不可取。将数据分成可管理的块总是好的。
-
@Smasher 我不同意你的观点,如果你想发送大文件,比如 4 GB 并且连接因任何原因而中断,你是重新开始,还是从最后一个成功的数据包继续?
-
@Smasher,为什么这是矫枉过正。块可以是 1MB 大,所以你有同样的情况。数据以一个块发送,但如果它更大,则以更多块发送。谁说块必须非常小。我所看到的只是这种方法的优点,没有真正的缺点。如果这样做,您基本上没有开销,因此您关于过度杀伤力的论点是无效的。