【问题标题】:Sending and receiving data streams in Delphi with INDY 10在 Delphi 中使用 INDY 10 发送和接收数据流
【发布时间】:2011-10-20 10:52:04
【问题描述】:

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

【问题讨论】:

  • a) 你不应该为此使用 UDP。 b) 学习有关网络的细节there
  • 我认为我的图像中的小块(检测到移动的区域)会小于 500 字节左右,我不在乎有些块是否没有更新。

标签: delphi indy10


【解决方案1】:
  1. Indy 的 UDP 组件根本不支持流,仅支持 TIdBytesString(内部使用 TIdBytes 处理)。如果您想发送/接收TStream 数据,您必须将数据复制到/从中间TIdBytes

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    相关资源
    最近更新 更多