【问题标题】:How to listen for multicast messages in java?如何在java中监听多播消息?
【发布时间】:2015-05-24 10:47:04
【问题描述】:

我正在编写有关向多个收件人广播的 oracle 教程,但客户端出现错误。 正如 oracle 的示例所述,我有我的客户端代码

public static void main(String[] args) throws IOException {
    MulticastSocket socket = new MulticastSocket(4446);
    InetAddress group = InetAddress.getByName("203.0.113.0");
    socket.joinGroup(group);

    DatagramPacket packet;
    for (int i = 0; i < 5; i++) {
        byte[] buf = new byte[256];
        packet = new DatagramPacket(buf, buf.length);
        socket.receive(packet);

        String received = new String(packet.getData());
        System.out.println("Quote of the Moment: " + received);
    }

    socket.leaveGroup(group);
    socket.close();
}

抛出异常

Exception in thread "main" java.net.SocketException: Not a multicast address
    at java.net.MulticastSocket.joinGroup(MulticastSocket.java:310)
    at BroadcastListener.main(BroadcastListener.java:11)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

怎么了?

【问题讨论】:

    标签: java network-programming broadcast


    【解决方案1】:

    根据 RFC 5771,多播 IP 地址必须以 224.. 开头。

    来自维基百科:

    IPv4 多播地址由 1110,源于早期的有类网络设计 这组地址被指定为 D 类时的 Internet。 该组的无类域间路由 (CIDR) 前缀是 224.0.0.0/4.

    【讨论】:

    • 好吧,那我应该使用什么地址呢?如果我使用例如 224.0.113.0 它会抛出一个异常说“无法分配请求的地址”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多