我編寫了一個能夠通過多播地址發送/接收消息的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;
}
}
我的程序具有聽和從四個不同的多播地址接收消息(224.0.0 4個並行線程[1 - > 4])和端口[66601-> 66604]。在測試中,我同時運行兩個程序來測試它們之間的通信。然而我發現有時候,程序A會發送一個消息給一個多播地址,在一個正確的情況下,A也會收到它,B也會收到它。但是有時候,我看到A宣佈它發送了消息,但是在那之後,A或者B再次接收它。我在本地機器上運行測試(Mac OS 10.9 with core 2 duo)。應該因爲我的電腦或其他什麼問題?
非常感謝。