使用INDY 10在Delphi中发送和接收数据流

时间:2011-10-20 10:52:04

标签: delphi indy10

这是Sending and receiving data streams in Delphi的延续。

我将使用TCP / IP发送图像,然后使用UDP通过将图片分成小块并仅发送具有重大更改的部分来更新该图像中的更改,然后客户端将修补这些旧图片上的碎片。

每15秒使用TCP / IP更新整个图像。

服务器中的图片将由网络摄像头更新。 (就像一个视频流)。我已经在delphi中创建了一个完美的运动检测器和片段收集器。

以下是我在实施中的问题

  

1.使用INDY 10中的TIDUDPServer / client发送和接收数据流(示例代码见> indy 10)我正在使用delphi XE2
  2. UDP中的一个数据包可支持的数据的最大大小是多少   3.当我双击IdUDPServer1.onUDPRead事件时,ide会产生错误

TArray <System.Byte>

我认为最后的错误是因为XE2中新引入的命名空间。

如何使用以下代替indy

 Sockets.TTcpClient 
 Sockets.TTcpServer 
 Sockets.TUdpSocket 

1 个答案:

答案 0 :(得分:1)

  1. Indy的UDP组件根本不支持流,只有TIdBytesString(使用TIdBytes在内部处理)。如果您要发送/接收TStream数据,则必须将数据复制到中间人TIdBytes

  2. UDP理论上限制在~64kb,但实际上受操作系统限制的限制要小得多。一般情况下,每个数据包的发送量不应超过8-16kb。

  3. 这是一个已知的Delphi编译器错误,在过去几个版本中尚未修复。 IDE正在生成基于RTTI的代码,编译器无法正确使用该代码。这不是Indy的错误,但Embarcadero意识到了这个问题。在他们(最终)修复编译器错误之前,你可以通过在运行时而不是在设计时在代码中分配OnUDPRead事件处理程序来解决它。