为啥我们使用 10.0.2.2 连接到本地 Web 服务器而不是在 android 客户端中使用计算机 IP 地址

Posted

技术标签:

【中文标题】为啥我们使用 10.0.2.2 连接到本地 Web 服务器而不是在 android 客户端中使用计算机 IP 地址【英文标题】:why do we use 10.0.2.2 to connect to local web server instead of using computer ip address in android client为什么我们使用 10.0.2.2 连接到本地 Web 服务器而不是在 android 客户端中使用计算机 IP 地址 【发布时间】:2012-04-06 04:54:24 【问题描述】:

我们通常在url中使用10.0.2.2:(端口号)来连接本地web服务器,但我们应该使用计算机的ip地址而不是10.0.2.2

那我们为什么要用10.0.2.2呢?

【问题讨论】:

可能10.0.0.2是电脑ip地址? @Blackbelt 链接已损坏..请更新它 @minBill 10.0.0.2 不是计算机 IP 地址,它是主机环回接口的特殊别名(即开发机器上的 127.0.0.1) 【参考方案1】:

如果您使用 10.0.2.2 进行连接,它将始终指向您的本地主机。在阅读本文之前,我为我的机器使用了真实 IP,它可以同时使用。

使用 10.0.2.2 的好处是你不用关心真实 IP 是什么,你可以在另一台电脑上更轻松地移动项目。

【讨论】:

使用 10.0.2.2 的另一个好处是,如果您的机器没有连接到互联网,它也可以工作。 嗨,感谢这是一个旧答案,但我尝试使用通过 USB 连接的物理设备进行相同操作,但使用 10.0.2.2 不起作用。你知道如何用物理设备做同样的事情吗? 嗨,我认为不会。模拟器在您的计算机上运行,​​而物理设备是完全独立的(不同的主机)。我不知道不涉及直接连接到您的计算机 IP 地址的解决方案。【参考方案2】:

如果您在计算机上同时运行服务器和模拟器,127.0.0.1:(port) 将引用模拟器本身而不是服务器。10.0.2.2 是该问题的解决方案:)

希望有所帮助

【讨论】:

【参考方案3】:

您使用 10.0.2.2 的原因是因为它是您的主机环回接口(又名 127.0.0.1)的特殊别名。这就是它起作用的原因,而且这样做不是很酷吗?

【讨论】:

【参考方案4】:

网络地址空间

模拟器的每个实例都在虚拟路由器/防火墙服务后面运行,该服务将其与您的开发机器的网络接口和设置以及互联网隔离开来。仿真设备无法看到您的开发机器或网络上的其他仿真器实例。相反,它只看到它通过以太网连接到路由器/防火墙。

每个实例的虚拟路由器管理 10.0.2/24 网络地址空间——路由器管理的所有地址都采用10.0.2.<xx> 的形式,其中<xx> 是一个数字。该空间内的地址由模拟器/路由器预先分配如下:

网络地址说明

10.0.2.1    Router/gateway address
10.0.2.2    Special alias to your host loopback interface (i.e., 127.0.0.1 on your development machine)
10.0.2.3    First DNS server
10.0.2.4 / 10.0.2.5 / 10.0.2.6  Optional second, third and fourth DNS server (if any)
10.0.2.15   The emulated device's own network/ethernet interface
127.0.0.1   The emulated device's own loopback interface

【讨论】:

@robert ,答案来自developer.android.com/studio/run/emulator-networking.html 虚拟网关的 IP (10.0.2.1) 是否对模拟设备不可见?我试过adb shell ping 10.0.2.1,但无法到达。

以上是关于为啥我们使用 10.0.2.2 连接到本地 Web 服务器而不是在 android 客户端中使用计算机 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

从物理设备连接到本地服务器期间超时

无法从Virtualbox连接到SQL Server

redis 尝试连接到 Heroku 中的本地主机 - 为啥?

当 IP 在 10.x.x.x 范围内时,通过本地 IP 连接到 android 模拟器

Android 模拟器无法连接到本地服务器(未指定输入文件)

Android 异常: failed to connect to localhost/127.0.0.1