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

时间:2012-01-19 12:17:37

标签: c# image sockets udp

我发送的位图图像以 jpeg * 的形式通过UDP套接字 *发送。问题是每个图像的大小都是可变的时间。容器图像数据包,它包含多个或单个图像以及数据包标识符信息。

服务器端

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);

2 个答案:

答案 0 :(得分:2)

我很确定你必须使用

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

在服务器端

答案 1 :(得分:0)

UDP用于发送图像文件?没办法。

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

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

除非您希望使用重发请求和数据报处理编写所有错误检查(以确保以正确的顺序备份文件),然后只使用TCP over socket。

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