DatagramSocketsを調整する必要のある統合テストがあり、それぞれ独自のスレッドで実行されています。 1つのソケットはreceive()へのブロッキング呼び出しでデータを読み込むのを待ちます。他のソケットはsend()を呼び出す必要がありますが、これはreceive()がブロックされた後でなければなりません。そうしないと、データが失われます。UDFデータグラムソケットで送受信を調整する方法
コードは少し、このようなものです:
レシーバー
byte[] buf = new byte[1024];
new DatagramSocket(7654).receive(new DatagramPacket(buf, buf.length));
送信者、私は前のThread.sleep()を入れて嫌がってる
new DatagramSocket(7654).send(
new DatagramPacket("hello".getBytes(Charset.forName("UTF-8")), 5));
send()を呼び出すことができますが、受信者がブロックできるようにするには十分です。これを行うエレガントな方法はありますか?
UDPは、この種の作業を調整するためのハンドシェイクメソッドを持っていない初歩的な。解決策は受信機に「準備完了」信号を待っているパケットを送信することです。送信者が実際のデータを受信すると確認が受信されると、私はこれを返信しませんでした。誰かがあなたを指すことができます。[this](http://www.oracle.com/technetwork/java/socket-140484.html#multi)は役に立ちますか? – Grambot
私はそれも考えていました。 Javaの並行性ツールを使って物事を調整する方法があるかもしれません。 – hertzsprung