Мне нужно отправлять и получать в многоадресной рассылке.
Я разместил вопрос на форуме StackOverflow для проверки своего кода: https://stackoverflow.com/questions/50131973/java-multicast-socket-doesnt-receive-anything-on-windows
Я попробовал свой код на Ubuntu, и он отлично работает.
Сейчас я экспериментирую с Windows 10. Я использую многоадресный сокет для отправки и получения DatagramPacket. Если InetAddress дейтаграммы «230.0.0.1» для многоадресной рассылки, это не работает. В противном случае, когда я использую IP-адрес компьютера, подключенного к локальной сети, он работает.
Приемник:
MulticastSocket multiSocket = new MulticastSocket(3575);
InetAddress groupMulticast = InetAddress.getByName( "230.0.0.1" );
multiSocket.joinGroup(groupMulticast);
DatagramPacket packetReceive = new DatagramPacket( bufReceive, bufReceive.length );
try {
multiSocket.receive( packetReceive );
} catch (IOException e) { e.printStackTrace(); }
Отправитель:
MulticastSocket multiSocket = new MulticastSocket(3575);
InetAddress groupMulticast = InetAddress.getByName( "230.0.0.1" );
multiSocket.joinGroup(groupMulticast);
byte[] bufSend = new byte[255];
DatagramPacket packetSend = new DatagramPacket( bufSend, bufSend.length,
groupMulticast, 3575 );
try {
multiSocket.send(packetSend);
} catch (IOException e) { e.printStackTrace(); }
Этот отправитель не работает. Но если я изменю это:
InetAddress groupMulticast = InetAddress.getByName( "230.0.0.1" );
с этим:
InetAddress groupMulticast = InetAddress.getByName( "192.168.0.21" );
где 192.168.0.21 - IP-адрес приемника, подключенного к локальной сети, работает.
Как я могу отправить многоадресную рассылку?
Попробуйте этот код.
public class Server3 {
public static void main(String[] args) throws IOException {
MulticastSocket multiSocket = new MulticastSocket(3575);
InetAddress groupMulticast = InetAddress.getByName("224.0.0.1");
multiSocket.setBroadcast(true);
multiSocket.joinGroup(groupMulticast);
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("Sending...");
String msg = "Hai";
byte[] bufSend = msg.getBytes();
DatagramPacket packetSend = new DatagramPacket(bufSend, bufSend.length, groupMulticast, 3575);
try {
multiSocket.send(packetSend);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class Client3 {
public static void main(String[] args) throws IOException {
MulticastSocket multiSocket = new MulticastSocket(3575);
InetAddress groupMulticast = InetAddress.getByName("224.0.0.1");
multiSocket.setBroadcast(true);
multiSocket.joinGroup(groupMulticast);
byte[] bufReceive = new byte[1024];
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("Receiving...");
DatagramPacket packetReceive = new DatagramPacket(bufReceive, bufReceive.length);
try {
multiSocket.receive(packetReceive);
System.out.println("msg...");
System.out.println(new String(bufReceive));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}