c# - 要每 50 毫秒发送一次图像,我应该使用 TCP 还是 UDP?

标签 c# image tcp udp

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

我使用的是 TCP,但除了该协议(protocol)的开销之外,有时客户端最终会在套接字上拥有多个图像。而且我还没有想出一个巧妙的机制来拆分每个图像的字节(实际上,我只需要最新的一个)。

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

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

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

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

最佳答案

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

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

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

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

关于c# - 要每 50 毫秒发送一次图像,我应该使用 TCP 还是 UDP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/754104/

相关文章:

c# - Dotnet nuke 代码隐藏事件未执行

C#:可以返回新添加对象的排序位置的通用排序容器?

python - Google App Engine (Python) - 上传文件(图片)

java - 旋转缓冲图像

c++ - 屏幕截图仅返回黑色图像

java - 限制每个 IP 的 TCP 请求

delphi - IdTCPServer 如何使用 OnExecute 发送和接收来自特定客户端的应答

c# - 我的 C# 应用程序在访问 Properties.Settings.Default.workingdirectory 时发出 HTTP 请求

c# - 使用 .NET core 3/3.1 的 Linux CentOS 8 中没有显示任何日志

Python socket.accept 非阻塞?