1

这是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 
4

1 回答 1

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

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

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

于 2011-10-23T15:57:33.500 回答