从其他访问android模拟器IP地址

时间:2019-07-02 07:12:34

标签: android port local httpserver

我试图在Android上创建http服务器。 APK在我的真实设备上正常运行。我是通过以下方式获取IP地址的:

Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface.getNetworkInterfaces();

while (enumNetworkInterfaces.hasMoreElements()) {

    NetworkInterface networkInterface = enumNetworkInterfaces.nextElement();
    Enumeration<InetAddress> enumInetAddress = networkInterface.getInetAddresses();

    while (enumInetAddress.hasMoreElements()) {

        InetAddress inetAddress = enumInetAddress.nextElement();

        if (inetAddress.isSiteLocalAddress()) {
            ip += "SiteLocalAddress: " + inetAddress.getHostAddress() + "\n";
        }
    }
}

它可以在我的真实设备上使用。在浏览器上,我可以通过输入上方的IP地址来访问它(例如192.168.1.21:8888)

但是如果我在模拟器上运行代码。它显示了更多的IP,其中一些像MAC地址,有些像普通地址(但它们不同):像

  

192.168.232.2

  

192.168.200.2:8888

然后,我尝试在浏览器上同时访问这两者,但加载一段时间后,显示错误“无法访问此网站”。

我尝试通过adb forward tcp:8888 tcp:8888转发端口,但是没有运气。我也尝试过10.0.2.2:8888,但也许是错误的,因为这就像从模拟器转发到本地PC一样,反之亦然...所以...我做错了什么?

谢谢您的时间

编辑:检查资源监视器后,端口8888当前为adb.exe

1 个答案:

答案 0 :(得分:0)

try this one
public static 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() && inetAddress instanceof Inet4Address) {
                    return inetAddress.getHostAddress();
                }
            }
        }
    } catch (SocketException ex) {
        ex.printStackTrace();
    }
    return null;
}