Назад | Перейти на главную страницу

Java Multicast Socket ничего не получает в Windows

Мне нужно отправлять и получать в многоадресной рассылке.

Я разместил вопрос на форуме 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();
        }
    }
}
}