首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java MulticastSocket导致空指针异常

Java MulticastSocket导致空指针异常
EN

Stack Overflow用户
提问于 2011-04-18 16:03:41
回答 3查看 6.3K关注 0票数 0

我正在尝试让一个多播套接字在一个“服务器”应用程序上工作,它将向一堆android手机发送信息。负责设置套接字和发送一些数据的代码片段如下:

代码语言:javascript
复制
    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);行并终止,并显示以下堆栈跟踪信息:

代码语言:javascript
复制
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)

...and我不知道为什么。

我确实有一个问题(请原谅它的n00bishness )-您在多播套接字中设置的IP地址只是一个占位符,还是您真的必须将IP地址设置为占位符?我一半的人认为你可能不知道--另一半则在尖叫着相反的声音--但当我在谷歌上搜索答案时,我找不到任何东西来证实这一点--只是它必须是一个相当窄范围内的地址。如果我弄错了(我的IP是192.168.1.3),那是问题所在吗?或者是其他原因。

提前感谢

史蒂夫

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-18 16:25:20

MulticastSocket及其joinGroup()用于接收组播数据包。发送组播报文与向群组地址发送普通UDP报文相同,需要为每个报文设置目的地址和端口:

代码语言:javascript
复制
packet = new DatagramPacket(buffer, buffer.length, group, 4446); 
...
multisocket.send(packet);

另请参阅:

  • MulticastSocket
票数 5
EN

Stack Overflow用户

发布于 2011-04-18 16:34:53

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

票数 2
EN

Stack Overflow用户

发布于 2016-07-26 23:54:22

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

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

代码语言:javascript
复制
DatagramPacket.setAddress(new InetSocketAddress("/239.193.129.14", 3450))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5700078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档