0

私は Java Socket の経験が限られており、すべて TCP を使用しています。私はUDPを学ぼうとしています。UDP マルチキャストを使用するマルチプロセス アプリケーションを実行しています。いくつかの簡単な調査 (およびこのトピックに関する初期の理解) の後、マルチキャストが適切なアプローチであると考えました。

比喩的に言えば、すべてのプロセスが同じ「部屋」を共有し、互いに「叫ぶ」必要があります。したがって、プロセス 1 が「こんにちは」というメッセージを送信すると、すべてのプロセス 2..n がそのパケットを受信し、その逆も同様です。

最初はすべて機能しているように見えましたが、バグがあることに気付きました (それを呼ぶことができる場合)。最初のプロセスを起動し、2 番目のプロセスを起動すると、最初のプロセスは 2 番目のメッセージを受け取りますが、その逆はありません。

私がMulticastSocket receive()プロセス1で行うとき、それは効果DatagramPacket的にそれをスタックから取り除き、プロセス2はそれがいつ行われるかを認識しないのだろうかと思っていましたrecieve()か?

4

1 に答える 1

2

問題はプロトコルの選択ではありません。TCP/IP は役に立ちませんし、UDP ブロードキャストも役に立ちません。

問題は、オペレーティング システムのネットワーク スタックが、ネットワーク トラフィックをリッスンしているものがない場合、ネットワーク トラフィックをバッファリングしないことです。そして、それが 2 番目のプロセスに関して起こっていることです。

要するに、あなたのスキームは機能しません。


1 つの代替方法は、「新しい」プロセスに「Who is there」メッセージをマルチキャストさせ、他のすべてのプロセスにマルチキャストまたはダイレクト パケットで応答させることです。ただし、ここで車輪を再発明しています。この問題は、さまざまな「ミドルウェア」スタックで何度も解決されています。

于 2012-05-26T03:48:15.923 に答える