为啥我们使用 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 地址的主要内容,如果未能解决你的问题,请参考以下文章
redis 尝试连接到 Heroku 中的本地主机 - 为啥?
当 IP 在 10.x.x.x 范围内时,通过本地 IP 连接到 android 模拟器