在 Android 中设置多播服务器套接字

Setting Up Multicast Server Socket in Android

我在 Android 中找到了一些设置多播套接字服务器(接收)的示例,我正在尝试将其添加到我的项目中。我的构造函数代码如下所示:

try
{
    this.socket = new MulticastSocket (PORT);
    socket.joinGroup (InetAddress.getByName (MULTICAST_ADDRESS));
}
catch (Exception ex)
{
    Log.e (TAG, "Start up error: " + ex.getMessage());
    ex.printStackTrace();

    this.running = false;
}

但是,由于我不明白的原因,每次执行 joinGroup() 行时都会抛出异常。奇怪的是,printStackTrace() 行没有给我任何东西,但是 Log.e() 业务给了我以下内容:

Multicast Server: Start up error: setsockopt failed: ENODEV (No such device)  

我已经为我的代码添加了必要的权限(CHANGE_WIFI_MULTICAST_STATE、ACCESS_WIFI_STATE、& INTERNET),并且我还获得了多播锁。

对这里遗漏的内容有什么建议吗?

兜兜转转,这道题和我的一样了:


答案是我需要指定接口,因为我喜欢的松下 Android 平板电脑有不止一个:

try
{
    NetworkInterface eth0 = null;
    Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();

    while (enumeration.hasMoreElements())
    {
        eth0 = enumeration.nextElement();

        if ("eth0".equalsIgnoreCase (eth0.getName()))
        {
            break;
        }
    }

    this.socket = new MulticastSocket (PORT);
    socket.setSoTimeout (60000);
    socket.joinGroup (new InetSocketAddress (MULTICAST_ADDRESS, PORT), eth0);
}
catch (Exception ex)
{
    ...