ip服务器公网地址获取

news/2024/11/28 18:35:19/

private fun getMobileIP(): String? {
    try {
       Enter .https://1024td.com @91.169.91.93 security pron archive()可以获取该节点的所有IP地址
        //getNetworkInterfaces()+getInetAddresses
        val networkInterfaceEnumeration = NetworkInterface.getNetworkInterfaces()
        //枚举进行遍历
        while (networkInterfaceEnumeration.hasMoreElements()) {
            val networkInterface = networkInterfaceEnumeration.nextElement()

            val inetAddressEnumeration = networkInterface.inetAddresses
            //枚举进行遍历
            while (inetAddressEnumeration.hasMoreElements()) {
                val inetAddress = inetAddressEnumeration.nextElement()
                //当不是回路地址且是IPV4时
                if (!inetAddress.isLoopbackAddress && inetAddress is Inet4Address) {
                    return inetAddress.getHostAddress()
                }
            }
        }
    } catch (e: SocketException) {
        return null
        e.printStackTrace()
    }
    return null
}


::1        IPv6形式,对应IPV4的127.0.0.1
127.0.0.1
fe80::c4eb:7d14:a746:a087%wlan0
192.168.20.20

该方法仅适用于只开启了移动流量未开启WIFI的时候使用,因为我们在遍历并判断是IPV4的地址时,获取到了第一个就直接返回了,而且该方法获取到的也是内网A类地址

while (inetAddressEnumeration.hasMoreElements()) {
    val inetAddress = inetAddressEnumeration.nextElement()
    //当不是回路地址且是IPV4时
    if (!inetAddress.isLoopbackAddress && inetAddress is Inet4Address) {
        return inetAddress.getHostAddress()
    }
}

当同时连接WIFI和移动流量时,将其打印,可以得到以下地址

10.98.193.41
192.168.137.21

public abstract class LiveData<T> {
    // 暂存值字段
    volatile Object mPendingData = NOT_SET;
    private final Runnable mPostValueRunnable = new Runnable() {
        @Override
        public void run() {
            Object newValue;
            synchronized (mDataLock) {
                // 同步地获取暂存值
                newValue = mPendingData;
                mPendingData = NOT_SET;
            }
            // 分发值
            setValue((T) newValue);
        }
    };
    
    protected void postValue(T value) {
        boolean postTask;
        synchronized (mDataLock) {
            postTask = mPendingData == NOT_SET;
            // 暂存值
            mPendingData = value;
        }
        ...
        // 向主线程抛 runnable
        ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);
    }
}


http://www.ppmy.cn/news/653873.html

相关文章

如何获取可靠的国外服务器IP地址?

在如今数字化时代&#xff0c;越来越多的企业、个人和组织需要拥有一个自己的网站。而为了让网站拥有更高的访问速度和更稳定的服务&#xff0c;选择一台可靠的国外独立服务器IP地址是至关重要的。那么&#xff0c;如何获取可靠的国外服务器IP地址呢? 一、了解国外服务器IP的种…

GreenPlum如何查看表和数据库的数据量大小?

假设表的模式为<schemaname>&#xff0c;表名为<tablename>。 执行以下命令&#xff0c;查询一张表的总大小&#xff08;单位为MB&#xff0c;包含表的索引和数据&#xff09;&#xff1a; select pg_size_pretty(pg_total_relation_size(<schemaname>.<t…

gocv读取gif多帧图像,mp4视频图像,opencv,VideoCaptureFile,opencv_ffmpeg

读取GIF图像 opencv中无法读取gif图像&#xff0c;这是由于license原因。转而使用 videocapture 或者第三方的 PIL 库&#xff08;Python&#xff09;&#xff0c;但是其实Golang的基础库image中就有读取gif图像的。于是一个简单的示例如下 func ReadAndShowGIF(filename str…

iNavFlight之MSP DJI协议分析

iNavFlight之MSP DJI协议分析 1. iNav串行口通信1.1 iNav 串口任务1.2 调用逻辑 2. iNav串行抽象2.1 框架代码2.2 MSP(DJI)协议处理 3. DJI协议相关实现3.1 DJI串口初始化3.2 DJI命令集3.3. DJI相关函数 4. 协议格式5. 参考资料 MSP DJI协议主要是为了解决如何将飞控内部信息传…

智能驾驶的狂想与现实落地

编辑导读&#xff1a;随着人工智能的技术发展&#xff0c;很多领域开始了革命式创新&#xff0c;智能驾驶就是其中的一个典型代表。本篇文章中作者介绍了智能驾驶的发展历程以及行业现状&#xff0c;并且通过分析智能驾驶的具体技术设计&#xff0c;预测了其未来发展趋势。 从1…

DIY无人机组装与飞控参数调试记录(DJI NAZA-LITE)

早就想玩一玩无人机&#xff0c;奈何各种原因一直没有机会&#xff0c;工作之后资金富足&#xff0c;加上本身工作和这个相关性比较大&#xff0c;于是就自己DIY了一台无人机。 一.材料准备&#xff1a; F450机架 GPS支架 好盈乐天 20A电调4个 YH2212 自锁电机4个 大疆NAZ…

硬核复工|赛尔联合大疆云课堂,助力测绘人研究“农房一体化”项目

2月27日&#xff0c;DJI大疆《平民化航测公开课》开讲。这是一场汇聚航测领域实力大咖、解决方案工程师、UTC高级慧飞讲师、资深航测飞手的“知识盛宴”。在新型冠状病毒肺炎疫情防控的关键时刻&#xff0c;在线云课堂让饱含激情的测绘人足不出户&#xff0c;也能赋能无人机航测…

7999元大疆最新无人机,支持第一人称视角极速拍摄,直接起飞

穿越山口、过火圈&#xff0c;体验2秒加速到100公里的急速飞行&#xff1a; 可以从第一视角体验拍摄效果&#xff0c;“就像是开启了第三只眼”&#xff1a; 而且&#xff0c;只需要靠手部动作“单手操作”&#xff0c;就能操控&#xff1a; 这是大疆最新推出的FPV无人机&#…