我试图让一个多播套接字在“服务器”应用程序上工作,它会在一堆安卓手机上吐出信息。负责设置套接字并发送一些数据的代码片段如下:
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)
...我不知道为什么。
我确实有一个问题(并且原谅它的不公平) - 您在多播套接字中设置的 IP 地址只是一个占位符,还是您真的必须将您的 IP 地址设置为那个?我有一半人认为你可能不知道——另一半人在尖叫相反——但当我在谷歌上搜索答案时,我找不到任何可以证实的东西——只是它必须是一个相当窄范围内的地址。如果我弄错了(我的 IP 是 192.168.1.3),那是问题所在吗?或者是别的什么。
提前致谢
史蒂夫