我正在构建一个 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/