Java - SocketException:不是多播地址

时间:2014-12-10 00:06:02

标签: java sockets multicast datagram

我的网络上有多个服务器都发送了广播消息。使用以下客户端,我试图捕获来自所有服务器的所有广播消息。发送部分工作正常(不包括在这篇文章中),但我的接收部分不起作用......我一直得到“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()]);
}

1 个答案:

答案 0 :(得分:2)

您正在混淆广播与多播。多播地址不是广播地址。决定你正在做的事情。如果您正在接收多播,则需要加入正确的多播地址,无论它是什么。如果您正在接收广播,请不要加入任何内容。