【问题标题】:To send an image every 50 ms., should I use TCP or UDP?要每 50 毫秒发送一次图像,我应该使用 TCP 还是 UDP?
【发布时间】:2010-10-19 17:45:38
【问题描述】:

我正在使用服务器-客户端模型构建一个 C# 应用程序,其中服务器每 50 毫秒通过套接字向客户端发送一个图像 (100kb)...

我使用的是 TCP,但除了此协议的开销之外,有时客户端会在套接字上获得多个图像。而且我还没有一个聪明的机制来分割每个图像的字节(实际上,我只需要最近的一个)。

我尝试使用 UDP,但得出的结论是我不能发送 100kb 的 dgram,只能发送 64kb 的。即便如此,我也不应该使用超过 1500 字节;否则数据包会沿着网络被分割,丢失部分数据包的机会会更大。

所以现在我有点困惑。我应该继续使用 TCP 并在每个图像的末尾放置一些转义字节,以便客户端可以将它们分开吗?或者我应该使用 UDP,发送 1500 字节的 dgram,并提出一种排序和恢复机制?

这里的关键目标是非常快速地传输图像。只要客户不断收到更新的,我不介意在途中丢失一些。

或者我应该使用其他协议吗?提前致谢!

【问题讨论】:

    标签: c# image tcp udp


    【解决方案1】:

    您应该考虑使用实时传输协议(又名RTP)。

    RTP 使用的底层 IP 协议是 UDP,但它有额外的分层来指示时间戳、序列顺序等。

    RTP 是 VoIP 和 IP 视频系统使用的主要媒体传输协议。如果您找不到该协议的现有 C# 实现,我会感到非常惊讶。

    此外,如果您的图像文件是 JPEG 格式,您应该能够生成 RTP/MJPEG 流。有相当多的视频查看器已经原生支持接收和显示这种流,因为一些 IP 网络摄像头以这种格式输出。

    【讨论】:

      【解决方案2】:

      首先,无论您做什么,您的网络都可能无法处理这个问题,但我会使用 UDP。您可以尝试将图像分成更小的部分,并且仅在下一张图像到达之前获得所有部分时才显示每张图像。

      另外,您可以像其他人提到的那样使用 RTP,或尝试UDT。它是 UDP 之上的一个相当轻量级的可靠层。它应该比 TCP 更快。

      【讨论】:

        【解决方案3】:

        如果出现以下情况,我建议使用 UDP:

        • 您的应用程序可以处理无法通过的图像或少量图像,
        • 您可以将图像压缩到 65535 字节。

        如果您正在实施视频会议应用程序,那么值得注意的是大多数使用 UDP。

        否则,您应该使用 TCP 并实施一种方法来分隔图像。在这方面的一个建议是查看RTP 协议。它专为传输 VoIP 和视频等实时数据而设计。

        编辑:过去我曾多次环顾四周寻找 .Net RTP 库,除了非 .Net 库的包装器或半完成的库之外,我没有取得太大的成功。我刚刚又快速浏览了一下,这可能是这个ConferenceXP 看起来更有希望。

        【讨论】:

          【解决方案4】:

          其他答案涵盖了很好的选择:UDP 或像 RTP 这样的“真实”协议。

          但是,如果您想坚持使用 TCP,只需为自己构建一个简单的“消息”结构来满足您的需求。最简单的?长度前缀。首先,发送图像的长度为 4 个字节,然后发送图像本身。很容易编写客户端和服务器。

          【讨论】:

          • 我同意这就是您通过 TCP 构建这些数据的方式,但这违背了新的最佳想法。因此,真的不希望因为失去旧的而延迟新的。
          【解决方案5】:

          如果最新比每张图片更重要,UDP 应该是您的首选。

          但是,如果您要处理大于 64K 的帧,则必须进行某种形式的重新构图。不要担心碎片帧,因为你必须处理它,否则下层会。而你只想要完整的图片。

          您需要的是某种形式的时间戳/序列封装。

          【讨论】:

            猜你喜欢
            • 2012-06-20
            • 1970-01-01
            • 2019-01-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-01
            • 2013-09-24
            相关资源
            最近更新 更多