Samie
Samie

Reputation: 83

Image not sending over UDP due to less buffer size C#

I am sending Bitmap image encoded in the form jpeg *over UDP socket*.The issue is there is variable size of images each time.Container is Image Packet which consists of Multiple or Single Image with a packet Identifier Information.

Server Side

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

Client Side

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

Upvotes: 0

Views: 2422

Answers (2)

ChrisBD
ChrisBD

Reputation: 9209

UDP for sending an image file? No way.

If you're after data integrity then forget it. TCP is the better protocol.

UDP is for sending small data packets where speed is the issue rather than data integrity, hence its use in internet gaming. Datagrams may arrive out of order, be duplicated, or vanish completely. UDP has no intrinsic error checking or correction. This is left to the application if required. Hence its speed over reliability.

Unless you wish to write all of that error checking with resend requests and datagram handling (to ensure that you build your file back up in the right order) then just use TCP over sockets.

At least with TCP you can split your image up into manageable blocks, send them and be safe in the knowledge that they'll arrive in the right order and complete.

Upvotes: 0

Marco
Marco

Reputation: 57573

I'm pretty sure you have to use

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

in server side

Upvotes: 2

Related Questions