3

次のコードを使用して、Hello, world!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();

何らかの理由で、コードは常に次のような例外をスローします。

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

どうしてこれなの?どうすれば修正できますか?

4

2 に答える 2

-1

データを取得するには:

            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();

        }

データを送信するには:

String msgToSend = "Hello, world!";

            dgram = new DatagramPacket(msgToSend.getBytes(), msgToSend.length(), group ,port);
            s.send(dgram);  
于 2012-12-28T22:15:18.667 に答える
-1

宛先アドレス: ポートを含まないsend()未接続の を呼び出してDatagramSocketいます。DatagramPacketそのため、送信先がありません。マルチキャスト アドレスに送信する場合は、最初の文で説明したことのいずれかを実行して、そうする必要があります。グループに参加してもそうはなりません。受信にのみ影響します。

于 2012-12-29T00:13:33.957 に答える