由于缓冲区大小C#较小,无法通过UDP发送图像

本文关键字:UDP 图像 缓冲区 较小 | 更新日期: 2023-09-27 18:20:52

我正在通过UDP套接字*发送以jpeg*形式编码的位图图像。问题是每次图像大小不一容器图像数据包,它由带有数据包标识符信息的多个或单个图像组成。

服务器端

MemoryStream Ms = new MemoryStream();
bformatter.Serialize(Ms, container);
byte[] TestingFlow = Ms.GetBuffer();
ServerSocket.SendTo(TestingFlow, 54000, 
                    SocketFlags.None, RemoteEndpoint);

客户端

byte[] Recievedbytes = UdpListener.Receive(ref RemoteEndPoint);
ImageStream = new MemoryStream(Recievedbytes, 0, Recievedbytes.Length);
imagecontainer = (ImageContainer)bformater.Deserialize(ImageStream);

由于缓冲区大小C#较小,无法通过UDP发送图像

我很确定你必须使用

ServerSocket.SendTo(TestingFlow,TestingFlow.Length,
                    SocketFlags.None, RemoteEndpoint);

在服务器端

UDP发送图像文件?不可能。

如果你追求数据完整性,那就别提了。TCP是更好的协议。

UDP用于发送速度而非数据完整性问题的小数据包,因此在互联网游戏中使用。数据报可能无序到达、重复或完全消失。UDP没有内部错误检查或更正。如果需要,这将留给应用程序。因此,它的速度高于可靠性。

除非您希望通过重新发送请求和数据报处理来编写所有的错误检查(以确保以正确的顺序备份文件),否则只需使用套接字上的TCP。

至少使用TCP,您可以将图像分割成可管理的块,发送它们,并确保它们以正确的顺序到达并完成。