我在本地机器上运行一个web服务,该服务运行在localhost:54722上。

我想从Android模拟器中运行的应用程序调用该服务。

我读到在应用程序中使用10.0.2.2将访问localhost,但它似乎不能与端口号一起工作。它说HttpResponseException: Bad Request。


当前回答

如果有人还在寻找这个,这就是我的工作方式。

您需要找到您的机器相对于您所连接的设备/模拟器的IP。对于模拟器的方法是按照以下步骤;

进入虚拟机虚拟框->在列表中选择连接的设备。 选择“设置”->网络->确认设备连接到哪个网络。对我来说,它是“VirtualBox主机专用以太网适配器#2”。 在virtualbox中进入“文件->首选项->网络->主机专用网络”,找到上面步骤中指定的网络的IPv4。(通过悬停你会得到信息)

提供这个IP以从模拟器访问本地主机。端口与您在运行/发布服务时提供的端口相同。

注意#1:确保您已经注意到防火墙和入站规则。

注意#2:请在重新启动计算机后检查此IP。由于某种原因,即使我提供了“使用以下IP”,主机IP也发生了变化。

其他回答

我有一个网络服务器运行在我的本地主机。

如果我打开模拟器并想要连接到我的本地主机,我使用的是192.168.x.x。这意味着您应该使用本地局域网ip地址。顺便说一下,您的HttpResponseException(坏请求)并不意味着主机不可达。

其他一些错误会导致此异常。

在Android模拟器上访问本地主机

从AndroidManifest.xml中添加internet权限 < uses-permission android: name = " android.permission。互联网" / > 添加android:usesCleartextTraffic="true",更多细节在这里: 运行如下命令找到您的系统IP地址:

ifconfig | grep "inet " | grep -v 127.0.0.1

复制从这一步(A)获得的IP地址

运行您的后端应用程序,您可以在localhost或127.0.0.1从您的系统访问它。 现在在android studio,你可以替换URL,如果你在代码中使用,或者你可以使用从步骤(A)获得的ip地址,并尝试在web浏览器中打开, 像这样http://192.168.0.102:8080/

不要忘记在IP地址后添加PORT,在我的例子中,应用程序运行在8080端口上,所以我添加了在(A)中获得的IP,端口为8080

您可以使用IP地址“10.0.2.2”访问您的主机。

Android团队就是这样设计的。所以你的web服务器可以完美地运行在本地主机,从你的Android应用程序,你可以通过“http://10.0.2.2:<hostport>”访问它。

如果模拟器必须通过代理服务器访问internet,则可以从模拟器的扩展控件屏幕配置自定义HTTP代理。打开模拟器后,单击更多,然后单击设置和代理。从这里,您可以定义自己的HTTP代理设置。

我想向您展示我从我的Android模拟器访问IISExpress Web api的方式。我使用Visual Studio 2015。我从Android Studio调用Android模拟器。

我所需要做的就是将下面这一行添加到我的applicationhost中的绑定配置中。配置文件

<binding protocol="http" bindingInformation="*:<your-port>:" />

然后我检查并使用IP4地址从Android模拟器访问我的API

要求:您必须以管理员身份运行Visual Studio。这篇文章给出了一个完美的方法。

欲了解更多细节,请访问我在github上的帖子

希望这能有所帮助。

问题是Android模拟器将10.0.2.2映射到127.0.0.1,而不是映射到localhost。因此,将web服务器配置为serveron 127.0.0.1:54722,而不是localhost:54722。这样就行了。