マルチキャスト アドレスを介してメッセージを送受信できる 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] からのメッセージをリッスンして受信する 4 つの並列スレッドがあります。テストでは、2 つのプログラムを同時に実行して、それらの間の通信をテストします。それでも、プログラム A がメッセージをマルチキャスト アドレスに送信し、正しいケースでは、A もそれを受信し、B も受信することがあることを発見しました。または B 再度受信します。ローカル マシン (Mac OS 10.9 with core 2 duo) でテストを実行します。この問題は、私のコンピューターまたは他の何かが原因である必要がありますか?
どうもありがとうございました。