andoridでUDPサービスを作成しています。ここにコピーされたコードの一部を明確にするために:
byte[] message = new byte[1500];
DatagramPacket packet = new DatagramPacket(message, message.length);
socket = new DatagramSocket(Constants.LISTENING_PORT_NUMBER);
socket.receive(packet);
問題は、UDPパケットを継続的に受信していることです。たとえば、パケット#1(250バイト長)、パケット#2(182バイト長)、パケット#3(403バイト長)など...
可変長の個別のUDPパケットを取得して処理する必要があります。UDPプロトコル仕様に従って、UDPパケットにはメッセージ境界が定義されています。しかし、UDPパケットを分離できるJavaのソリューションは見つかりませんでした。
現在のソリューションでは、読み取る必要のあるパケット長を定義する必要がありますが、受信する前にパケット長がわかりません。
私はポイントを逃していますか?
編集: トビアスとシャジンの両方に感謝します。どちらも正解です。悲しいことに、2つの答えを正解としてマークすることはできません。
はsocket.receive(packet);
UDPパケット境界まで受信し、後続のパッケージは別ので読み取ることができますsocket.receive(packet);
。
私の問題は、最初のメッセージの処理中に、同期処理のために到着したそれ以降のメッセージが処理されないことです。次に、メッセージ処理を非同期タスクに渡し、到着したすべてのパケットを時間内にキャッチできるようになります。