2013-10-13 33 views
1

我知道TCP模拟一个流,所以通常读取将在收到任何数据后立即开始。这就是为什么我用这个片段作用于它UDP数据包是否全部到达?

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

对于UDP但是之前,为了确保它等待整个数据包,将我还是要解决同样的问题?我不这么认为,因为TCP基本上是通过将数据分解为更小的数据包并发送来模拟流,而在UDP中,您可以更好地控制整个流程。

对于阅读UDP我用

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

我一定要实现对UDP类似的制度?

回答

3

当你发送一个数据报包时,它将被全部接收,是的(当它被实际接收时 - 继续阅读答案)。

UDP和TCP的行为变化远不止于此。 UDP不保证数据包将按照它们发送(甚至完全接收)的顺序接收,或者它们只被接收一次。 UDP更像是一个“失火和遗忘”,而TCP则保持连接状态。

总之,如果收到数据包,你会得到整个数据包。但可能根本收不到。