Fricken Hamster
Fricken Hamster

Reputation: 569

Do UDP packets arrive in entirety?

I know that TCP simulates a stream, so typically reads will start as soon as any data is received. Thats why I use this snippet to make sure it waits for the entire packet before acting on it

int packetSize = inputStream.readShort() ;
byte packetBuffer[] = new byte[packetSize];
int byteTrans = 0;
while ( byteTrans < packetSize )
{
    inputStream.read( packetBuffer , byteTrans , 1 );
    byteTrans++;
}//

For UDP however, will I still have to work around the same problem? I don't think so because TCP basically simulates a stream by breaking up your data into smaller packets and sending it, while in UDP you have more control over the whole process.

For reading UDP I use

byte[] packetByte = new byte[packetSize];
DatagramPacket packet = new DatagramPacket(packetByte, packetByte.length);
socket.receive(packet);

Do I have to implement a similar system for UDP?

Upvotes: 1

Views: 477

Answers (1)

Jeff Storey
Jeff Storey

Reputation: 57162

When you send a datagram packet, it will be received in its entirety, yes (when it is actually received - continue reading the answer).

The behavior of UDP and TCP varies in much more than just that. UDP does not guarantee packets will be received in the same order they are sent (or even received at all) or that they are recevied exactly once. UDP is more of a "fire and forget", whereas TCP maintains a connection state.

In short, if the packet is received, you will get the whole packet. But it may not be received at all.

Upvotes: 4

Related Questions