macosxに深刻な問題があります。macosxでバックアップ分散アプリケーションを開発しています。アプリケーションはファイルをネットワークに送信する必要があり、ネットワークのピアはファイルをバックアップする必要があります。したがって、この目的のために2つのスレッドを使用します。最初のスレッドはシステムからファイルを読み取り、私が事前定義したプロトコルを使用してそれらをネットワークにアップロードし、2番目のスレッドはネットワーク内の他のピアからのメッセージを待機します。
次のコードを使用しています:
送信するスレッド:
String putchunk_string = "MESSAGE TO SEND...";
DatagramSocket socket = new DatagramSocket ();
string address = "225.0.0.2"; // ip of multicast
string port = 4002; // port of multicast
byte buf[] = putchunk_string.getBytes();
DatagramPacket pack = newDatagramPacket(buf,buf.length,
InetAddress.getByName(address),port);
socket.send(pack);
socket.close();
受信するスレッド:
started=true;
MDataChannel = new MulticastSocket(4002);
MDataChannel.setLoopbackMode(true);
MDataChannel.setTimeToLive(1);
MDataChannel.joinGroup(InetAddress.getByName("225.0.0.2"));
while(started)
{
received_packet = new DatagramPacket(message, message.length);
MDataChannel.receive(received_packet);
//....More code to parse the message
}
私の問題は次のとおりです。ルーターに接続されたコンピューター、1つのウィンドウと他のmac os xがあり、両方に同じコードがあります。Windowsからmacosxコンピューターにファイルを送信すると、すべて問題ありません。MacコンピュータはWindowsコンピュータからパケットを受信しますが、setloopbackmodeを使用してmulticastsocketのループバックを無効にしているため、Windowsコンピュータはパケットを受信しません。しかし、mac os xコンピューターからWindowsに送信すると、問題が発生します。Windowsコンピューターはパケットを受信しますが、Macコンピューターもパケットを受信します。これは、独自のパケットであり、ループバックを無効にするsetloopbackmode(true)があるためです。 。
私はOSXでJava1.6を使用していますが、すでに1.7を試しています。
私はこれを正しく行っていませんか、これはosxのJavaマルチキャストソケットのバグですか?よろしく