我知道TCP模拟流,因此通常只要收到任何数据就会开始读取。这就是为什么我使用这个片段来确保它在行动之前等待整个数据包
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实现类似的系统?
答案 0 :(得分:4)
当你发送一个数据报包时,它将被全部收到,是的(当它实际收到时 - 继续阅读答案)。
UDP和TCP的行为变化远不止于此。 UDP不保证数据包的接收顺序与它们发送(甚至根本不接收)的顺序相同,或者它们只接收一次。 UDP更像是“火上浇油”,而TCP则保持连接状态。
简而言之,如果收到数据包,您将获得整个数据包。但它可能根本没有收到。