それらのパケットは単に消えていますか?それとも彼らは目的地を待ちますか?または、パケットが戻ってから例外がスローされますか?
また、Java では、DatagramPacket コンストラクターで、byte[] バッファーと長さの違いは何ですか?
DatagramPacket dp = new DatagramPacket(new byte[...], length);
それらのパケットは単に消えていますか?それとも彼らは目的地を待ちますか?または、パケットが戻ってから例外がスローされますか?
また、Java では、DatagramPacket コンストラクターで、byte[] バッファーと長さの違いは何ですか?
DatagramPacket dp = new DatagramPacket(new byte[...], length);
ウィキペディアから:
UDPは...信頼できない–メッセージが送信されたとき、メッセージが宛先に到達するかどうかを知ることはできません。途中で迷子になる可能性があります。確認応答、再送信、またはタイムアウトの概念はありません。
宛先がオンラインであっても、UDP パケットが到着するか、送信された順序で到着するか、フラグメント化されないという保証はありません。(532 バイトより小さいパケットはフラグメント化されないと思います) 3 つすべてを持つことは可能です。同じパケットに対して断片化され、順序が乱れ、不完全です。
ネットワークの単純さと安定性によって、UDP パケット配信の堅牢性が決まりますが、少なくとも一定の時間は信頼できないと想定する必要があります。できることは、損失を最小限に抑えることだけです。
パケットが失われた場合にどうするか、およびそれを検出する方法を決定するのはあなた次第です。
メッセージのブロードキャストで信頼性の高い配信が必要な場合は、ActiveMQ などの JMS トピックまたはキューを検討することをお勧めします。
UDP プロトコルを使用している場合、パケットが受信されることを保証できません。答えは、送信先がオンラインでなくても送信されるということです。
TCP プロトコルは、顧客がパケットを受信することを保証します。彼がオフラインであっても、オンラインになると、そのパケットが受信されます。