MulticastSocket不禁用mac os x上的环回

时间:2013-03-25 22:59:13

标签: java windows macos multicast multicastsocket

我在mac os x中遇到了严重的问题。我在mac os x中开发备份分布式应用程序。应用程序必须将文件发送到网络,并且网络的对等方必须备份该文件。所以为了这个目的我使用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
}

我的问题是:我必须将计算机连接到路由器,一个窗口和其他mac os x,并且我在两者中都有相同的代码。当我从Windows发送文件到mac os x计算机时,一切都很好。 mac计算机从Windows计算机和Windows计算机接收数据包不接收任何数据包,因为我已使用setloopbackmode在multicastsocket上禁用环回。但是,当我从mac os x计算机发送到Windows时,我有一个问题:Windows计算机接收数据包但是mac计算机也接收数据包,他不应该接收,因为是自己的数据包,我有setloopbackmode(true),禁用环回

我在os x中使用java 1.6,但我已经尝试过1.7。

我没有这样做,或者这是osx上java多播套接字的错误? 此致

1 个答案:

答案 0 :(得分:0)

我想我发现了答案......当目标机器等于源机器时,windows基本上会考虑环回数据报。当目标套接字等于源套接字时,Mac OS考虑一个环回数据报。

此致