【问题标题】:MulticastSocket dont disable loopback on mac os xMulticastSocket 不要在 mac os x 上禁用环回
【发布时间】:2013-03-25 22:59:12
【问题描述】:

我在 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 多播套接字的错误? 问候

【问题讨论】:

    标签: java windows macos multicast multicastsocket


    【解决方案1】:

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

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2014-07-23
      • 2012-02-29
      相关资源
      最近更新 更多