我编写了一个能够通过多播地址发送/接收消息的 java 程序。我的多播发送者代码:
public boolean multicastSender(DataTransferObject message) {
try {
InetAddress group = InetAddress.getByName(ip);
MulticastSocket s = new MulticastSocket(port);
s.joinGroup(group);
String msg = jsh.dtoToJsonString(message);
DatagramPacket data = new DatagramPacket(
msg.getBytes(), msg.length(), group, port);
s.send(data);
s.leaveGroup(group);
return true;
} catch (IOException e) {
System.out.println(e.toString());
e.printStackTrace();
return false;
}
}
我的多播接收器代码:
public DataTransferObject multicastReceiver() {
try {
InetAddress group = InetAddress.getByName(ip);
MulticastSocket s = new MulticastSocket(port);
s.joinGroup(group);
byte[] buffer = new byte[1000 * 1024];
DatagramPacket data = new DatagramPacket(buffer, buffer.length);
String jsonData;
DataTransferObject dto;
while (true) {
s.receive(data);
jsonData = new String(buffer, 0, data.getLength());
dto = jsh.dtoFromJson(jsonData);
if (dto == null) {
continue;
} else {
return dto;
}
}
} catch (IOException e) {
System.out.println(e.toString());
e.printStackTrace();
return null;
}
}
我的程序有 4 个并行线程,它们侦听和接收来自四个不同多播地址 (224.0.0.[1->4]) 和端口 [66601->66604] 的消息。在测试中,我同时运行两个程序来测试它们之间的通信。然而我发现有时,程序 A 向多播地址发送消息,在正确的情况下,A 也会收到它,B 也会收到。但有时,我看到 A 宣布它发送了消息,但之后,A 都没有或 B 再次收到。我在本地机器上运行测试(Mac OS 10.9 with core 2 duo)。这个问题应该是因为我的电脑还是其他原因?
非常感谢。