【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来解决这个问题。希望这篇文章能帮助你解决这个常见的开发问题!

相关推荐
袁煦丞 cpolar内网穿透实验室13 分钟前
出差路上,服务器在我手机里
运维·服务器·docker·容器·智能手机·远程工作·cpolar
小此方16 分钟前
Re:Linux系统篇(十三)特别篇: 实现Linux第⼀个系统程序−进度条
linux·运维·服务器
tedcloud1235 小时前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
AC赳赳老秦8 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
程序员陆业聪8 小时前
两次Flutter全屏白踩坑复盘:Layout的静默失败,以及AI结对编程的认知盲区
android
程序员陆业聪9 小时前
Compose Strong Skipping Mode 的真相:它并不会让你的类型变 Stable
android
IpdataCloud10 小时前
高并发场景下IP数据接口怎么选?从QPS到离线库的完整选型指南
网络·网络协议·tcp/ip
treesforest11 小时前
IP精准定位服务:从城市轮廓到街道坐标,技术如何重塑空间感知
网络·数据库·网络协议·tcp/ip·ip
大明者省11 小时前
宝塔开了端口,Ubuntu 还得开相应端口才能打通
服务器·数据库·ubuntu
平行侠12 小时前
A15 工业路由器IP前缀高速检索与内存压缩系统
网络·tcp/ip·算法