我发送的位图图像以 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);
答案 0 :(得分:2)
我很确定你必须使用
ServerSocket.SendTo(TestingFlow,TestingFlow.Length,
SocketFlags.None, RemoteEndpoint);
在服务器端
答案 1 :(得分:0)
UDP用于发送图像文件?没办法。
如果你追求数据完整性,那就忘了它。 TCP是更好的协议。
UDP用于发送速度是问题而不是数据完整性的小数据包,因此用于互联网游戏。数据报可能无序到达,被复制或完全消失。 UDP没有内部错误检查或更正。如果需要,这留给应用程序。因此它的速度超过了可靠性。
除非您希望使用重发请求和数据报处理编写所有错误检查(以确保以正确的顺序备份文件),然后只使用TCP over socket。
至少使用TCP,您可以将图像拆分为可管理的块,发送它们并确保它们能够以正确的顺序到达并完成。