我的网络上有多个服务器都发送了广播消息。使用以下客户端,我试图捕获来自所有服务器的所有广播消息。发送部分工作正常(不包括在这篇文章中),但我的接收部分不起作用......我一直得到“SocketException:不是多播地址”,我做错了什么?
public static String[] capture(int port) { // port is always 63332
ArrayList<String> clients = new ArrayList<>();
InetAddress address = Utilities.getBroadcastAddress(); // I get "/192.168.2.255" here
MulticastSocket socket = null;
try {
socket = new MulticastSocket(port);
socket.setSoTimeout(2000);
socket.joinGroup(address); // this part throws the exception
DatagramPacket packet;
byte[] packetContent;
while (true) {
packetContent = new byte[1024];
packet = new DatagramPacket(packetContent, packetContent.length);
try {
socket.receive(packet);
String client = packet.getAddress() + ":" + packet.getPort();
clients.add(client);
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if(socket != null) {
try {
socket.leaveGroup(address);
} catch(IOException e) {
e.printStackTrace();
}
socket.close();
}
return clients.toArray(new String[clients.size()]);
}
答案 0 :(得分:2)
您正在混淆广播与多播。多播地址不是广播地址。决定你正在做的事情。如果您正在接收多播,则需要加入正确的多播地址,无论它是什么。如果您正在接收广播,请不要加入任何内容。