Java MulticastSocket导致空指针异常

Ste*_*eve 0 java nullpointerexception multicastsocket

我正在尝试使多播套接字在“服务器”应用程序上工作,该应用程序会将信息吐到一堆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();
    }
Run Code Online (Sandbox Code Playgroud)

发生的情况是,它到达了该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)
Run Code Online (Sandbox Code Playgroud)

...而我为什么不知所措。

我确实有一个问题(请原谅),您在多播套接字中设置的IP地址只是一个占位符,还是真的必须将IP地址设置为那个?我一半人认为您可能不会-另一半人则大声疾呼-但在谷歌搜索答案时我找不到任何东西可以证实这一点-只是它必须是一个范围很窄的地址。如果我错了(我的IP为192.168.1.3),那是问题所在吗?或者是别的什么。

提前致谢

史蒂夫

axt*_*avt 5

MulticastSocketjoinGroup()是关于接收组播数据包的。发送多播数据包与将常规UDP数据包发送到组的地址相同,因此您需要为每个数据包设置目标地址和端口:

packet = new DatagramPacket(buffer, buffer.length, group, 4446); 
...
multisocket.send(packet);
Run Code Online (Sandbox Code Playgroud)

也可以看看: