Cling和cybergarage报错java.io.IOException: sendto failed: EPERM (Operation not permitted)

Android 11以上的版本对网络有限制,必须要支持multicast的NetworkInterface才可以进行网络相关操作,所以需要在获取HostAddresses的地方进行判断NetworkInterface:

Enumeration nis = NetworkInterface.getNetworkInterfaces();
while (nis.hasMoreElements()) {
    NetworkInterface ni = (NetworkInterface) nis.nextElement();

    if( !ni.supportsMulticast() ) { // added due to Android security requirements
        Log.w("TAG", "NetworkInterface " + ni + " not supportsMulticast");
        continue;
    } // end of fix

    Enumeration addrs = ni.getInetAddresses();
    while (addrs.hasMoreElements()) {
        InetAddress addr = (InetAddress) addrs.nextElement();
        if (!isUsableAddress(addr))
            continue;
        nHostAddrs++;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容