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

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

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


当前回答

我通过在Visual Studio Professional 2015中安装“输送机by Keyoti”解决了这个问题。 输送机生成一个远程地址(您的IP),端口(45455)支持外部请求。 例子:

输送机允许您从网络上的外部平板电脑和手机或Android模拟器测试web应用程序(没有http://10.0.2.2:<hostport>)

操作步骤如下:

https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti

其他回答

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

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

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

对于Laravel宅基地用户: 如果任何人使用Laravel与homestead,您可以在模拟器中使用192.168.10.10访问应用程序后端

还是不行? 另一个好的解决方案是使用ngrok https://ngrok.com/

默认AVD使用10.0.2.2,Genymotion使用10.0.3.2

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

我解决了服务层使用Visual Studio IIS Express时的问题。只是指向10.0.2.2:端口不会工作。我没有像其他文章中提到的那样把IIS Express搞得一团糟,而是在IIS Express前面放了一个代理。例如apache或nginx。nginx.conf看起来像

 # Mobile API
 server { 
    listen       8090;
    server_name  default_server;

    location / {
        proxy_pass http://localhost:54722;
    }
  }

然后android需要指向我的IP地址为192.168.x.x:8090