从Android模拟器访问localhost:端口
我在本地机器上运行一个Web服务,该机器在localhost:54722
运行。
我想从Android模拟器中运行的应用程序调用服务。
我读了在应用程序中使用10.0.2.2
将访问本地主机,但它似乎也不能与端口号一起工作。 它说HttpResponseException: Bad Request
。
然而,有一个更好的解决scheme。 您可以使用IP地址“ 10.0.2.2
”访问主机。
这是由Android团队以这种方式devise的。 所以你的web服务器可以完美运行在本地主机上,从你的Android应用程序,你可以通过“ http://10.0.2.2:<hostport>
”来访问它。
默认AVD使用10.0.2.2,Genymotion使用10.0.3.2
如果您正在使用IIS Express,则可能需要绑定到所有主机名而不是“localhost”。 检查这个很好的答案:
https://stackoverflow.com/a/15809698/383761
告诉IIS Express自己绑定到所有的IP地址和主机名。 在您的.config文件中(通常为%userprofile%\ My Documents \ IISExpress \ config \ applicationhost.config或Visual Studio 2015的$(solutionDir).vs \ config \ applicationhost.config),find您网站的绑定元素,然后添加
<binding protocol="http" bindingInformation="*:8080:*" />
确保将它添加为第二个绑定,而不是修改现有的或VS将只是重新添加一个新的网站(1)
另外,您可能需要以pipe理员身份运行VS。
我有我的本地主机上运行的Web服务器。
如果我打开模拟器,并希望连接到我的本地主机,我正在使用192.168.xx
这意味着你应该使用你的本地lan ip地址。 顺便说一下,你的HttpResponseException (Bad Request)
并不意味着主机不可达。
其他一些错误导致这个例外。
您需要将URL设置为10.0.2.2:portNr
portNr =
ASP.NET Development Server给定的端口,我当前的服务在localhost:3229/Service.svc
上运行
所以我的url是10.0.2.2:3229
我这样解决了我的问题
我希望这有助于…
“BadRequest”是通常由服务器本身发送的错误,参见rfc 2616
10.4.1 400错误的请求
由于格式错误,服务器无法理解请求。 客户端不应该不加修改地重复请求。
所以你得到了一个到服务器的连接,但是你的请求并不适合这个expression式。 我不知道你是如何创build连接的,包含了什么头(如果有的话) – 但那是你应该检查的。
如果您需要更多帮助,请说明您的代码是什么以及它用于连接到服务器的方式,所以我们有了全面的了解。
这是一个问题,同样的问题 – 答案是内容types没有设置在标题中。
我在Visual Studio Professional 2015中安装了“Controor by Keyoti”解决了这个问题。输送机通过一个端口(45455)生成一个REMOTE地址(您的IP),以启用外部请求。 例:
输送机允许您从networking上的外部平板电脑和手机或Android模拟器(无http://10.0.2.2:<hostport>
)testingnetworking应用程序
步骤如下:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
问题在于Android模拟器将10.0.2.2
映射到127.0.0.1
, 而不是 localhost
。 因此,将您的Web服务器configuration为127.0.0.1:54722
服务器而不是localhost:54722
。 这应该做到这一点。
我想告诉你我从Android模拟器访问IISExpress Web API的方式。 我正在使用Visual Studio 2015.我从Android Studio调用Android模拟器。
所有我需要做的是将下面的行添加到我的applicationhost.config文件中的绑定configuration
<binding protocol="http" bindingInformation="*:<your-port>:" />
然后我检查并使用IP4地址从Android模拟器访问我的API
要求:您必须以pipe理员身份运行Visual Studio。 这篇文章给出了一个完美的方法来做到这一点
欲了解更多详情,请访问我的post在github上
希望这可以帮助。
本地主机似乎在我的模拟器开始工作正常,然后我开始得到连接拒绝exception我从模拟器浏览器使用127.0.2.2,它的工作,当我在我的Android应用程序在模拟器中使用它,它再次开始显示连接拒绝问题。
然后我做了ifconfig和我用的IP 192.168.2.2,它的工作完美
错误的请求通常意味着您发送的数据格式不正确。 可能是数据映射不匹配。 如果您收到错误的请求,则意味着您可以连接到服务器,但请求没有正确发送。
如果有人仍然在寻找这个,这就是它对我的工作。
您需要根据所连接的设备/仿真器查找机器的IP。 仿真器上的方法是按以下步骤操作;
- 转到虚拟机虚拟框 – >在列表中select连接的设备。
- select设置 – >networking – >找出设备连接到哪个networking。 对我来说,它是'VirtualBox主机以太网适配器#2'。
- 在virtualbox中,进入Files-> Preferences-> Network-> Host-Only Networks,找出上述步骤中指定的networking的IPv4。 (通过hover你会得到的信息)
提供此IP以从模拟器访问本地主机。 端口与您在运行/发布服务时所提供的相同。
注意#1:确保您已经照顾防火墙和入站规则。
注意#2:重新启动机器后请检查这个IP。 出于某种原因,即使我提供了“使用下面的IP”主机专用IP已经改变。
当服务层使用Visual Studio IIS Express时,我解决了这个问题。 只要指向10.0.2.2:port不会工作。 正如其他职位所提到的那样,我没有在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.xx:8090
如果您使用的是像node express或angular-cli这样的第三方软件包,您将需要find您的机器的IP,并将主机连接到服务器启动configuration(而不是本地主机)内的IP。 然后使用IP从模拟器启动它。 例如,我不得不使用: ng serve -H 10.149.212.104
来使用angular度cli。 然后从我使用的模拟器: http://10.149.212.104:4200
: http://10.149.212.104:4200
: http://10.149.212.104:4200
在Visual Studio上执行IIS Express上的Web应用程序时,我遇到了同样的问题。 要修复它,你需要去你的项目属性,然后单击debugging选项卡,并更改http:// localhost:[你的端口] http://127.0.0.1:%5BYOUR端口%5D,并将Android的url设置为http:/ /10.0.2.2:[YOUR PORT]。 它为我工作。
在url中提供您的系统具有互联网的IP地址。 例如:190.168.1.90它为我工作