3 votes

Java UDP multicasting - exception étrange

J'utilise le code suivant pour envoyer Hello, world! à un groupe multicast avec Java.

InetSocketAddress sa = new InetSocketAddress("239.0.0.1", 12345);
MulticastSocket s = new MulticastSocket(sa);
s.setTimeToLive(255);
s.joinGroup(sa.getAddress());

byte[] sbuf = "Hello, world!".getBytes();
DatagramPacket sp = new DatagramPacket(sbuf, sbuf.length, sa);
s.send(sp);

byte[] rbuf = new byte[1024];
DatagramPacket rp = new DatagramPacket(rbuf, rbuf.length);
s.receive(rp);

System.out.format("Received \"%s\".\n", new String(rbuf));

s.leaveGroup(sa.getAddress());
s.close();

Pour une raison quelconque, le code lance toujours une exception de ce type :

java.io.Exception: Invalid argument
    at java.net.PlainDatagramSocketImpl.send(Native Method)
    at java.net.DatagramSocket.send(...)
    at ...

Comment cela se fait-il ? Comment puis-je y remédier ?

-1voto

DmitryK Points 1323

Pour obtenir des données :

            InetAddress group;
            int port;
            group = InetAddress.getByName("239.0.0.1");
            port = Integer.parseInt("12345");

            //create Multicast socket to to pretending group
            MulticastSocket s = new MulticastSocket(port);
            s.joinGroup(group);

while(running){

            s.receive(pkt);

            System.out.println();

            String msg_rec;

            msg_rec = new String(pkt.getData(), 0, pkt.getLength());

            System.out.println("(FROM:" + pkt.getAddress()+ ") "+ msg_rec);

            System.out.println();

        }

Pour envoyer des données :

String msgToSend = "Hello, world!";

            dgram = new DatagramPacket(msgToSend.getBytes(), msgToSend.length(), group ,port);
            s.send(dgram);

-1voto

EJP Points 113412

Vous appelez send() sur un site non connecté DatagramSocket avec un DatagramPacket qui ne contient pas d'adresse de destination:port. Il n'y a donc aucun endroit où l'envoyer. Si vous voulez l'envoyer à l'adresse multicast, vous devez le dire, en faisant l'une des choses mentionnées dans la première phrase. Rejoindre le groupe ne fait pas cela : cela n'affecte que la réception.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X