0

我正在创建一个需要通过多播和单播发送消息的应用程序。它适用于 Linux,但我很难让它适用于 Windows。

我一直得到一个 BindException,我在这段代码片段中隔离了这个问题:

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.MulticastSocket;

public class Test {
    public static void main(String[] args) {

        InetSocketAddress isa = new InetSocketAddress("239.255.0.113", 1234);
        try {
            MulticastSocket mcs = new MulticastSocket(isa);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

如果我运行这个程序,我会得到以下异常:

java.net.BindException: Cannot assign requested address: Cannot bind
    at java.net.TwoStacksPlainDatagramSocketImpl.bind0(Native Method)
    at java.net.AbstractPlainDatagramSocketImpl.bind(Unknown Source)
    at java.net.TwoStacksPlainDatagramSocketImpl.bind(Unknown Source)
    at java.net.DatagramSocket.bind(Unknown Source)
    at java.net.MulticastSocket.<init>(Unknown Source)
    at Test.main(Test.java:10)

错误发生在 MulticastSocket 构造函数中。我不知道如何让它工作。

4

2 回答 2

3

可能有点晚了,但对于其他搜索网络的人来说:
您必须调用接受端口号的构造函数,然后加入组(组是 InetAddress)。

public class Test {
    public static void main(String[] args) {

        InetAddress ia = new InetAddress.getByName("239.255.0.113");
        try {
            MulticastSocket mcs = new MulticastSocket(1234);
            mcs.joinGroup(ia);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

完成后别忘了打电话mcs.leaveGroup(ia)

于 2013-08-09T15:07:08.897 回答
2

绑定到多播地址在 Windows 上不起作用。绑定到 null,这意味着 INADDR_ANY。

于 2012-12-30T01:31:51.667 回答