0

我在 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
}

我的问题是:我必须将计算机连接到路由器、一个 windows 和其他 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 多播套接字的错误?问候

4

1 回答 1

0

我想我找到了答案..当目标机器等于源机器时,基本上 Windows 会考虑一个环回数据报。当目标套接字等于源套接字时,Mac os x 会考虑一个环回数据报。

问候

于 2013-04-04T00:03:29.300 回答