【Android】在AVD虚拟机中访问宿主机上运行的服务器:使用特殊IP地址10.0.2.2

问题描述

当我们向后端程序发送请求时,使用127.0.0.1无法访问到后端API接口。

这篇文章将解释为什么在Android模拟器中无法使用127.0.0.1,并介绍如何解决这个问题。


原因分析

在Android模拟器或虚拟机中,127.0.0.1指向的是虚拟机自身,而不是宿主机。因此,当我们尝试使用127.0.0.1访问宿主机上运行的服务器时,请求实际上是发送到了虚拟机自身,而不是宿主机。

为了解决这个问题,Android模拟器提供了一个特殊的IP地址:10.0.2.2。这个IP地址被映射到宿主机的回环接口,可以用来访问宿主机上运行的服务器。


解决方案

如果你在模拟器中运行一个应用程序,并且需要访问宿主机上的服务器,可以将服务器的地址设置为10.0.2.2:port,其中port是服务器的端口号。

例如,在Retrofit中,我们可以把baseUrl设置为10.0.2.2

java 复制代码
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://10.0.2.2:8080/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

在上面的示例中,我们将服务器的地址设置为10.0.2.2:8080,并发送请求到该地址。

通过使用10.0.2.2,我们可以成功访问宿主机上运行的服务器,并与后端API进行通信。


注意事项

10.0.2.2只在模拟器或虚拟机中有效,在真实的设备上是无法使用的。因此,在真实设备上进行开发和测试时,应该使用真实的IP地址或域名来访问服务器。


总结

当在Android模拟器中无法使用127.0.0.1访问宿主机上的服务器时,可以使用10.0.2.2来解决这个问题。希望这篇文章能帮助你解决这个常见的开发问题!

相关推荐
是真的小外套10 分钟前
2024年软考中级信息安全工程师|选择题考点+案例分析真题解析(含答案)
android·网络
小天源2 小时前
让访问数据可解释:IP 地球大屏、地区库更新与运行维护设计
网络·网络协议·tcp/ip
张宇Joaquin2 小时前
AMD uProf 工具采集微架构特征使用介绍
服务器
用户2018792831672 小时前
一文讲透 Android Native Heap 监控原理:一间"只进不出"的仓库,和总部派来的侦探
android
老李IT笔记3 小时前
连不上不一定是网不好:新系统不认的服务端配置卡在哪一档
运维·服务器·网络
刚入门的大一新生3 小时前
Linux-进程池
linux·运维·服务器
YB13753 小时前
Jetpack Compose 动画animate*AsState
android
高晶3 小时前
Android 通讯录应用开发实战:从零搭建 SQLite 数据持久化完整项目
android·设计模式·前端框架
万联WANFLOW4 小时前
拆解 Meta Prometheus 网络:20,736 张 GPU 如何互联?4 个设计取舍值得关注
tcp/ip·meta·gpu
隐擎fox4 小时前
深入 Android 移动端风控与协议层对抗:内核级虚拟环境检测、网络堆栈特征伪装与住宅 IP 协同实战
android·网络·python·网络协议·tcp/ip