Java多播套接字导致空指针异常

Java多播套接字导致空指针异常,java,nullpointerexception,multicastsocket,Java,Nullpointerexception,Multicastsocket,我正在尝试在一个“服务器”应用程序上使用一个多播套接字,该应用程序将向一堆android手机发送信息。负责设置套接字和发送数据的代码段如下所示: private MulticastSocket multisocket; private DatagramPacket packet; private InetAddress addr; private Question question; byte[] buffer = "Some text to be se

我正在尝试在一个“服务器”应用程序上使用一个多播套接字,该应用程序将向一堆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(数据包)行和模具具有以下堆栈跟踪信息:

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)
…我不知道为什么

我确实有一个问题(并为它的n00bishness辩解)——您在多播套接字中设置的IP地址只是一个占位符,还是您真的必须将您的IP地址设置为该占位符?我的一半认为你可能不知道——另一半则相反——但我在谷歌搜索答案时找不到任何东西来证实这一点——只是它必须是一个范围相当窄的地址。如果我搞错了(我的IP是192.168.1.3),那么这就是问题所在吗?或者是别的什么

提前谢谢


Steve

MulticastSocket
及其
joinGroup()
是关于接收多播数据包的。发送多播数据包与发送普通UDP数据包到组地址相同,因此需要为每个数据包设置目的地址和端口:

packet = new DatagramPacket(buffer, buffer.length, group, 4446); 
...
multisocket.send(packet);
另请参见:


多播套接字
及其
joinGroup()
用于接收多播数据包。发送多播数据包与发送普通UDP数据包到组地址相同,因此需要为每个数据包设置目的地址和端口:

packet = new DatagramPacket(buffer, buffer.length, group, 4446); 
...
multisocket.send(packet);
另请参见:


    • 他说的话。事实上,发送时根本不需要MulticastSocket或joinGroup():可以使用常规的DatagramSocket。但是您必须将目标地址放入DatagramPacket。此外,您的异常处理也非常重要。如果在第一个try块中出现异常,则仍将继续处理第二个异常。所有这些代码都应该在一个try块中。

      他说的话。事实上,发送时根本不需要MulticastSocket或joinGroup():可以使用常规的DatagramSocket。但是您必须将目标地址放入DatagramPacket。此外,您的异常处理也非常重要。如果在第一个try块中出现异常,则仍将继续处理第二个异常。所有这些代码都应该在一个try块中。

      如果写入
      DatagramPacket.setAddress(…)
      InetSocketAddress
      未解析或格式错误,您还可以从send调用接收相同的异常
      java.lang.NullPointerException:null buffer | | null address

      例如,考虑到通常的
      InetAddress.toString()
      格式,这看起来似乎是合理的,但不是:

      DatagramPacket.setAddress(new InetSocketAddress("/239.193.129.14", 3450))
      

      如果写入
      DatagramPacket.setAddress(…)
      InetSocketAddress
      未解析或格式错误,您还可以从发送调用接收相同的异常
      java.lang.NullPointerException:null buffer | | null address

      例如,考虑到通常的
      InetAddress.toString()
      格式,这看起来似乎是合理的,但不是:

      DatagramPacket.setAddress(new InetSocketAddress("/239.193.129.14", 3450))
      

      这很有效,非常感谢:)我整天都在盯着不同的插座。。。在这一切中迷失了方向…这很有效,非常感谢:)我整天都在盯着不同的插座。。。都迷路了…谢谢。。。我正在动态学习这一点-将把它全部转移到一次尝试/捕获。。。(Eclipse到目前为止一直在为我做这件事)谢谢。。。我正在动态学习这一点-将把它全部转移到一次尝试/捕获。。。(到目前为止,Eclipse一直在为我做这件事)