0

「サーバー」アプリでマルチキャストソケットを動作させようとしています。これは、多数のAndroid携帯に情報を吐き出します。ソケットのセットアップとデータの送信を担当するコード スニペットは次のとおりです。

    private MulticastSocket multisocket;
    private DatagramPacket packet;
    private InetAddress addr;
    private Question question;

    byte[] buffer = "Some text to be sent".getBytes();
    packet = new DatagramPacket(buffer, buffer.length);

    try {
        addr = InetAddress.getByName("228.5.6.7");
        multisocket = new MulticastSocket(4446);
        multisocket.joinGroup(addr);

    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        System.out.println("Sending...");
        multisocket.send(packet); // This is the line it dies on...     
        System.out.println("Text sent, closing socket");
        multisocket.close();

    } catch (IOException e) {
        e.printStackTrace();
    }

何が起こるかというmultisocket.send(packet);と、次のスタック トレース情報でラインに到達して終了します。

Exception in thread "SendThread" java.lang.NullPointerException: null address || null buffer
    at java.net.PlainDatagramSocketImpl.send(Native Method)
    at java.net.DatagramSocket.send(Unknown Source)
    at Model.QuestionSendThread.run(CommServer.java:158)

...そして、私はその理由について途方に暮れています。

私が持っている 1 つの質問 (そしてそれの不自然さを言い訳します) - マルチキャスト ソケットに設定した IP アドレスは単なるプレースホルダーですか、それとも本当に IP アドレスをそれに設定する必要がありますか? 私の半分はおそらくそうではないと思います-残りの半分は反対のことを叫んでいます-しかし、答えをグーグルで調べたときにそれを確認するものは何も見つかりません-それはかなり狭い範囲のアドレスでなければならないということだけです. これが間違っている場合 (私の IP は 192.168.1.3)、それが問題なのでしょうか? それとも別のものですか?

前もって感謝します

スティーブ

4

3 に答える 3

5

MulticastSocketそしてそれjoinGroup()はマルチキャストパケットの受信に関するものです。マルチキャスト パケットの送信は、通常の UDP パケットをグループのアドレスに送信するのと同じです。したがって、各パケットの宛先アドレスとポートを設定する必要があります。

packet = new DatagramPacket(buffer, buffer.length, group, 4446); 
...
multisocket.send(packet);

以下も参照してください。

于 2011-04-18T08:25:19.660 に答える
2

彼が言ったこと。実際、送信するのにMulticastSocketやjoinGroup()はまったく必要ありません。通常のDatagramSocketを使用して送信できます。ただし、宛先アドレスをDatagramPacketに入れる必要があります。また、例外処理はポールアップです。最初のtryブロックで例外が発生した場合でも、2番目のブロックに進んでいます。このコードはすべて、単一のtryブロック内にある必要があります。

于 2011-04-18T08:34:53.207 に答える