如何获取安卓模拟器的IP地址?

Posted

技术标签:

【中文标题】如何获取安卓模拟器的IP地址?【英文标题】:How to get the Android Emulator's IP address? 【发布时间】:2010-12-15 18:36:12 【问题描述】:

我想通过代码获取当前运行的android Emulator的IP地址。 如何实现?

【问题讨论】:

可能与here和here有关。 @hhh 第二个链接坏了。 :) @MuhamedHuseinbašić 我觉得这个帖子解决了第二个帖子中的问题,所以决定删除它以保持简单。 【参考方案1】:

澄清一下:在您的应用程序中,您可以简单地将模拟器称为“localhost”或 127.0.0.1。

Web 流量通过您的开发机器进行路由,因此模拟器的外部 IP 是您的提供商分配给该机器的任何 IP。开发机器始终可以从您的设备访问 10.0.2.2。

由于您只询问模拟器的 IP,您想做什么?

【讨论】:

我想为你投票 100 次。在阅读您的帖子之前,我无法弄清楚我的应用程序如何与我正在运行的另一台本地服务器通信。谢谢! 如何从 10.0.2.2 访问您的开发机器?我尝试 ping,但没有,图片 here。右侧的 ifconfig -app 和左侧的 terminal-emulator 试图 ping 开发机器。在 localhost 中看不到任何内容,有什么简单的测试吗? @hhh 你可以试试 JuiceSSH:play.google.com/store/apps/details?id=com.sonelli.juicessh 你可以从提到的 IP 或主机的真实 IP 访问你的主机。两种变体都适合我。 我相信来自模拟器的流量首先通过“虚拟”路由器路由(IP 地址为10.0.2.1,而不是直接路由。因此,此路由器之间应该有一个额外的连接@ 987654324@ 到主机/开发机器127.0.0.1/10.0.2.2。我通常会更改我想连接的端口号。【参考方案2】:

如果您确实希望将 IP 分配给您的模拟器:

adb shell
ifconfig eth0

这会给你类似的东西:

eth0: ip 10.0.2.15 mask 255.255.255.0 flags [up broadcast running multicast]

【讨论】:

Luise 说:我试过Derek方法。它可以在 adb shell 中 ping 通. adb shell 后出现此错误:ifconfig: eth0: No such deviceany 想法为什么? @awavi 它可能在不同的界面下,例如wlan0【参考方案3】:

像这样:

public String getLocalIpAddress() 
    try 
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) 
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) 
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) 
                    return inetAddress.getHostAddress().toString();
                
            
        
     catch (SocketException ex) 
        Log.e(LOG_TAG, ex.toString());
    
    return null;

查看文档了解更多信息:NetworkInterface。

【讨论】:

别忘了'android.permission.INTERNET'权限 这给出了IP6地址,如何获得IP4?【参考方案4】:

使用此方法,您将获得 100% 正确的 android 模拟器 IP 地址

获取你的模拟器的ip地址

转到 adb shell 并输入此命令

adb shell
ifconfig eth0

运行此命令后,我得到了

IP:10.0.2.15

掩码:255.255.255.0

这对我有用。我也在为一个网络应用程序工作。

【讨论】:

模拟器不再有“eth0”,而是有“radio0”和“wlan0”。您可能需要编辑此答案,因为它不再是 100% 正确的。【参考方案5】:

如果您需要引用主机的 localhost,例如当您希望模拟器客户端联系运行在同一主机上的服务器时,请使用别名 10.0.2.2 来引用主机计算机的环回接口。从模拟器的角度来看,localhost(127.0.0.1)指的是自己的loopback接口。更多详情:http://developer.android.com/guide/faq/commontasks.html#localhostalias

【讨论】:

【参考方案6】:
public String getLocalIpAddress() 

    try 
        for (Enumeration < NetworkInterface > en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) 
            NetworkInterface intf = en.nextElement();
            for (Enumeration < InetAddress > enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) 
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) 
                    return inetAddress.getHostAddress().toString();
                
            
        
     catch (SocketException ex) 
        Log.e(LOG_TAG, ex.toString());
    
    return null;

【讨论】:

【参考方案7】:

在我的应用程序代码中,我可以像下面这样轻松获取正在运行的设备 IP 地址:

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

【讨论】:

以上是关于如何获取安卓模拟器的IP地址?的主要内容,如果未能解决你的问题,请参考以下文章

用电脑运行安卓模拟器,他的IP和电脑相同吗?

用电脑运行安卓模拟器,IP怎么不一样的?

安卓模拟器怎么切换IP地址

安卓模拟器上网的话IP和电脑的IP是一样的吗?

用电脑运行安卓模拟器,他的IP和电脑相同吗

安卓模拟器 端口号怎么查看