1

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 用に同様のシステムを実装する必要がありますか?

4

1 に答える 1

4

データグラム パケットを送信すると、その全体が受信されます。はい (実際に受信されたとき - 回答を読み続けます)。

UDP と TCP の動作は、それだけではありません。UDP は、パケットが送信されたのと同じ順序で受信される (またはまったく受信されない) こと、または 1 回だけ受信されることを保証しません。TCP が接続状態を維持するのに対し、UDP は「ファイア アンド フォーゲット」に近いものです。

つまり、パケットを受信すると、パケット全体が取得されます。ただし、まったく受信できない場合があります。

于 2013-10-13T21:55:23.113 に答える