我正在构建一个C#应用程序,使用服务器 - 客户端模型,服务器每50ms通过一个套接字向客户端发送一个图像(100kb)...
我使用的是TCP,但除了这个协议的开销之外,有时客户端最终在套接字上有多个图像.我仍然没有一个聪明的机制来分割每个图像的字节(实际上,我只需要最新的一个).
我尝试使用UDP,但得出的结论是我不能发送100kb图表,只能发送64kb图表.即便如此,我不应该使用超过1500字节; 否则,数据包将沿着网络划分,丢失部分数据包的可能性会更大.
所以现在我有点困惑.我应该继续使用TCP并在每个图像的末尾放置一些转义字节,以便客户端可以将它们分开吗?或者我应该使用UDP,发送1500字节的dgrams并提出订购和恢复机制?
这里的关键目标是快速传输图像.只要客户不断接收新的东西,我不介意在途中丢失一些.
或者我应该使用其他协议?提前致谢!
您应该考虑使用实时传输协议(也称为RTP).
RTP使用的基础IP协议是UDP,但它具有额外的分层以指示时间戳,序列顺序等.
RTP是VoIP和IP视频系统使用的主要媒体传输协议.如果你找不到协议的现有C#实现,我会感到很惊讶.
此外,如果您的图像文件是JPEG格式,您应该能够生成RTP/MJPEG流.由于某些IP网络摄像头以该格式输出,因此有相当多的视频查看器已经具有接收和显示此类流的本机支持.