我怎样才能从我的Android设备访问我的本地主机?
我能够访问我的笔记本电脑的Web服务器使用Android模拟器,我使用10.0.2.2:portno
运作良好。
但是,当我连接我的真正的Android手机,手机浏览器无法连接到我的笔记本电脑上的同一个Web服务器。 手机使用USB电缆连接到笔记本电脑。 如果我运行adb devices命令,我可以看到我的手机。
我错过了什么?
USB不提供networking到移动设备。
如果桌面和手机都连接到相同的WiFi (或任何其他本地networking),则使用由路由器(不是localhost
而不是127.0.0.1
)分配的桌面IP地址。
要找出您的桌面的IP地址:
- 键入命令行
ipconfig
(Windows)或ifconfig
(Unix) - 将会有一堆IP
- 尝试所有这些(除了前面提到的
localhost
和127.0.0.1
)
如果你的手机连接到移动networking ,那么事情将变得更加困难。
要么硬派:
- 首先找出你的路由器的外部IP地址( https://www.google.de/search?q=myip )
- 然后,在路由器上,将某个端口转发到
<your desktop IP>:<server port number>
- 最后使用外部IP地址和转发端口
否则使用像xip.io或ngrok的东西。
这很简单。
打开您的Android手机/路由器的Wifi热点,并将您的笔记本电脑连接到您的手机。
在localhost启动你的服务器(我正在使用wamp服务器)
现在打开命令提示符并inputipconfig命令,你会得到如下的东西
Wireless LAN adapter Wireless Network Connection: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::80bc:e378:19ab:e448%11 IPv4 Address. . . . . . . . . . . : **192.168.43.76** Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.43.1
在您的手机浏览器中复制这个192.168.43.76 。
注意:请将您的networking设置为“家庭networking”。 设置家庭networking意味着允许您的PC与同一networking上的其他设备共享资料。 如果使用Windows 10,请转到WiFi>当前networking的networking属性>使此PC可被发现。
在Windows PC上使用“ipconfig”命令查找IPv4地址可能不需要做任何其他操作。
- 第1步:使用USB电缆将手机连接到PC。
- 步骤2:使用命令'ipconfig'找出你的IPv4地址(路由器的外部IP),例如192.168.1.5。
- 步骤3:只需从手机浏览器访问“192.168.1.5:8080”即可。 有用 !
其他环境详细信息:Windows 7,Google Nexus 4(4.2.2),Tomcat服务器,Grails应用程序。
您还应该确保您有权限访问AndroidManifest文件中的Internet:
<uses-permission android:name="android.permission.INTERNET"/>
我发现这个问题的一个快速解决scheme。 试试这个链接 。 它应该可以帮助你解决这个问题。
我只改变了一件事情,教程指出你将“127.0.0.1”改为“全部”,改为服务器运行的IP地址。
之后,你应该能够连接到你的本地主机。
以下是链接页面信息的(校对)副本:
步骤1
安装Wamp服务器(或其他你喜欢的)。
这是我知道build立本地服务器的最好的服务器之一。 如果您已经安装了Apache或任何其他服务器,请忽略此步骤。
从这里下载并安装Wamp Server。
第2步
在Windows防火墙中为端口80添加新规则。
-
打开控制面板并selectWindows防火墙。
-
从Windows防火墙设置页面的左侧面板中select高级设置。
-
从左侧面板中select入站规则,然后select新build规则。
-
select端口然后单击下一步。
-
select“特定本地端口”单选button,并input80作为端口值。
-
保持允许连接不变并转到下一步。
-
保持“configuration文件”选项不变,然后单
-
给新的规则一些好的名字,然后点击完成。
这将启用本地networkingIP上的端口80访问。
第3步
编辑Wamp服务器的httpd.conf文件以修复403错误。
我们需要编辑这个文件。 否则,当我们通过本地networkingIP访问本地主机时,会得到403禁止的错误。
-
点击Wamp服务器托盘图标。
-
打开Apache服务器子菜单。
-
selecthttpd.conf。
-
在httpd.conf文件中find这个configuration部分:
Directory “c:/wamp/www/” # # Possible values for the Options directive are “None”, “All”, # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that “MultiViews” must be named *explicitly* — “Options All” # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.2/mod/core.html#options # for more information. # Options Indexes FollowSymLinks # # AllowOverride controls what directives may be placed in .htaccess files. # It can be “All”, “None”, or any combination of the keywords: # Options FileInfo AuthConfig Limit # AllowOverride all # # Controls who can get stuff from this server. # # onlineoffline tag – don't remove Order Deny,Allow Deny from all Allow from 127.0.0.1
find“127.0.0.1”并用“全部”replace,保存该文件,然后重新启动Wamp服务器。
步骤4
find您的本地networkingIP。
-
打开命令提示符。
-
键入并input
ipconfig
命令。 -
在我的情况下,我的局域网地址是10.0.0.2。
这是你需要通过WiFi访问你的Android手机上的本地主机的IP。 要testing它是否正常工作,请在安装本地主机服务器的桌面浏览器中input此IP地址。 浏览器应该显示您的本地主机页面成功。 这将确保这个本地networkingIP现在可以在您的Android手机上成功访问。
我希望这个教程将帮助你通过wifi访问你的本地主机。
mac osx用户
我通过启用远程pipe理获得了成功:
- 确保您的
phone and laptop are connected to the same wifi network
- 在Mac上,转到
system preferences/sharing
enable remote management
你会看到类似这样的消息
其他用户可以使用地址
some.url.com
来pipe理您的计算机
在你的Android设备上,你现在应该能够打到some.url.com
,它代表你的Mac上的localhost
。 你也可以使用ifconfig
来获取你的macbook的ip
使用ngrok的便携式解决scheme(任何带有node或npm的操作系统)
如果您不介意将您的项目暴露给临时域,则可以使用ngrok
。 比方说,我有一个应用程序在localhost:9460
上运行localhost:9460
npm install ngrok -g ngrok http 9460
这会给我:
Session Status online Update update available (version 2.2.8, Ctrl-U to update) Version 2.2.3 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://f7c23d14.ngrok.io -> localhost:9460 Forwarding https://f7c23d14.ngrok.io -> localhost:9460 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00
我现在可以通过https://f7c23d14.ngrok.io
来远程查看本地主机。 与客户分享devise工作或进展,这是非常好的
备用解决scheme与Nginx的代理通行证
如果你通过nginx proxy_pass运行这样的东西,它将需要更多的调整 – 这是一个hacky的方法,但它适用于我,我很乐意改进它的build议:
- 启用远程pipe理(如上所述)
- 暂时将服务器设置为在端口
81
上监听,而不是在80
端口上监听 -
sudo nginx -s reload
- 请访问
http://youripaddress:81
“`
server { listen 80; listen 81; # <-------- add this to expose the app on unique port server_name ~^(local|local\.m).example.com$; ... }
重新加载并访问http://youripaddress:81
由于这是一个古老的问题,有一个新的方法可以做到这一点非常简单。 下载ADB Chrome扩展程序 ,然后按照以下说明进行操作:
https://developers.google.com/chrome-developer-tools/docs/remote-debugging
然而,有一个更好的解决scheme。 您可以使用IP地址“10.0.2.2”访问主机。 这是由Android团队以这种方式devise的。 所以你的web服务器可以完美运行在本地主机上,从你的Android应用程序,你可以通过“http://10.0.2.2:8080”访问它。;
您的Web服务器可能在您的回环接口上进行监听,而不是在您的networking接口上进行监听。 主要迹象是:
- 点击
127.0.0.1
和localhost
(从本地或Android模拟器)工作 - 点击
192.168.xxx.xxx
不起作用,无论是从本地主机,局域网或广域网
我会更多地讨论这个问题,并在这里回答这个问题。
“Android版Chrome浏览器中的端口转发function使您可以轻松地在移动设备上testing您的开发站点,它可以通过在您的移动设备上创build一个侦听TCP端口来映射到开发计算机上的特定TCP端口,这些端口之间的stream量通过USB传输,所以连接不依赖于你的networkingconfiguration。“
更多细节在这里: https : //developer.chrome.com/devtools/docs/remote-debugging#port-forwarding
以pipe理员身份运行CMD
并在CMD屏幕上inputipconfig ,屏幕将显示文本
作为这张照片
你可以访问你的本地主机使用这个IP你必须连接到你的电脑连接到相同的networking
试试看这个文件: C:\wamp\bin\apache\Apache2.2.11\conf\httpd.conf
# onlineoffline tag - don't remove Order Deny,Allow Allow from all // change it Deny Allow from 127.0.0.1
并将10.0.2.2更改为您的IP地址。
我使用这个过程:
- 在PC上安装Fiddler
- 按照这些优秀的说明设置PC和Android设备
- 只需转到Android设备上的浏览器并inputhttp://ipv4.fiddler即可访问本地主机
请注意,此过程要求您在每个会话的开始和结束时更改Android设备上的WiFi设置。 我发现这一点,然后根植我的Android设备的痛苦。
首先使你的机器(服务器运行的地方)的IP地址是静态的。 在android代码中input这个静态IP地址。 接下来去你的无线路由器的界面,并检查左侧面板。 您将看到端口转发/转发等选项。 点击它并转发端口80.现在编辑您的htttpd.conf
文件并进行编辑
全部允许
。 重新启动您的服务器。 一切都应该现在正常工作。
此外,您可以保留机器的IP地址,以便始终将其分配给您。 在路由器界面的左侧面板中,findDHCP -> Address Reservation
,点击它。 input您的机器的MAC地址和您在代码中input的IP地址。 点击保存。 这将为您的机器保留给定的IP地址。
基于笔记本电脑将我的移动设备连接到我的wamp服务器的解决scheme:
首先,wifi不是路由器。 所以要将我的移动设备连接到基于我笔记本电脑上的localhost的wamp服务器上,我需要一个路由器。 我已经下载并安装了一个免费的虚拟路由器: https : //virtualrouter.codeplex.com/
configuration它非常简单:
- 右键单击系统托盘中的虚拟路由器图标
- 点击configuration虚拟路由器
- 填写密码
- 如果您的互联网连接在以太网中,请select共享连接:以太网
- 然后在您的笔记本电脑和设备上设置wifi
- 在您的设备上连接到虚拟路由器networking名称
然后,您可以通过启动浏览器连接到笔记本电脑,并填充笔记本电脑的IPV4地址(在Windows上find它,inputcmd:ipconfig,并findipv4地址)
你应该看到你的wamp服务器主页。
使用几个不同的本地主机服务器遇到了这个问题。 最后,只需使用Python简单服务器,即可在几秒钟内启动并运行我的应用程序。 这只需要几秒钟,所以在进入任何更复杂的解决scheme之前值得一试。 首先,确保你已经安装了Python。 cmd+r
并inputpython
for Windows或$ python --version
在macterminal中。
下一个:
cd <your project root> $ python -m SimpleHTTPServer 8000
然后find你的主机在networking上的地址,我使用System Preferences/Sharing
在Mac上find它。 点击到你的Android设备,应该加载你的index.html
,你应该是好的。
如果不是,那么问题是别的,你可能想看看其他一些build议的解决scheme。 祝你好运!
*编辑*
如果您使用Chrome,另一个快速解决scheme是Web服务器Chrome扩展。 我发现它是一个快速,超级简单的方法来访问我的手机上的本地主机。 只要确保在Options
下检查Accessible to local network
,它应该在你的手机没有任何问题。
ngrok让你把你的本地主机放到临时服务器上,设置起来非常简单。 我在这里提供了一些可以在链接中find的步骤:
- 从上面的链接下载ngrok zip
- 打开邮编
- 在本地运行服务器并记下端口号
- 在terminal中,转到ngrok所在的文件夹,input
ngrok http [port number]
您将在terminal中看到一个指向您本地主机的地址。 将您的应用指向该地址并构build到您的设备。
尽pipe一个答案已经被接受,但这对我来说很有效:
- 确保您的电脑和Android设备都在同一networking上。
- 得到你的电脑的IP地址。 (如果是terminal内的mactypes的
ifconfig
,并且查找en0/en1 -> inet
它应该是19*.16*.1.4
类的东西)(在windows上使用ipconfig) -
打开你的手机设置,进入networking – >长按你的wifinetworking – >修改networking – >向下滚动到高级选项 – >select代理手册,并在代理主机名input你的地址即
19*.16*.1.4
内部端口input港口。 并保存。 -
search
what is my ip
在谷歌浏览器,并获得您的IP,可以说是1**.1**.15*.2**
- 尝试访问
1**.1**.15*.2**:port/
从您的移动设备。
这是如此简单。
这是为我工作,我添加了127.0.0.1 IP后面的另一行来指定我想要使用的设备的确切的本地networkingIP地址(而不是公共IP地址)。 在我的情况下,我的三星Galaxy S3
按照Bangptit的build议编辑httpd.conf文件(x是版本号):C:\ wamp \ bin \ apache \ Apache2.xx \ conf \ httpd.conf
searchonlineoffline标签,并添加您的手机的IP(我在我的路由器configuration页中find了我的手机IP地址):
onlineoffline标签 – 不要删除
Order Deny,Allow Deny from all Allow from 127.0.0.1
我的手机ip在下面的行
Allow from 192.168.1.65 Allow from ::1 Allow from localhost
可以扩展到包括一个完整的子域,例如192.168.1.0/24等
首先把你的手机和电脑连接到普通的wifi上。
然后,以pipe理员身份运行以打开命令提示符
给ipconfig命令
其中显示无线局域网ip
使用您的服务器的ip:端口在手机访问
使用USB电缆:
(例如,如果您使用WAMP服务器):
1)在您的PC上安装您的Android驱动程序,并下载便携式Android共享反向工具,并通过反向工具应用程序连接您的Android设备。
2)点击WAMP图标>放置在线(重新启动后)。
3)在Android浏览器中打开你的IP(即http://192.168.1.22
或http://164.92.124.42
)
要查找您的本地IP地址,请单击开始>运行> cmd并键入ipconfig ,您的IP地址将显示在输出中。
就这样。 现在你可以从Android访问(打开)本地主机。
通过简单的解决scheme(只需从移动设备访问laptop_ip_addr:port
,当移动设备和笔记本电脑在同一个WiFi上),就会得到一个ERR_CONNECTION_REFUSED错误。 也就是说,我的MacBook似乎拒绝了我的手机连接尝试。
ADB Reverse Socket(仅限Android)
这个解决scheme适用于我(用MacBooktesting):
- 用USB线将Android移动设备连接到笔记本电脑
- 在移动设备上启用USBdebugging
- 在笔记本电脑上,运行
adb reverse tcp:4000 tcp:4000
- 使用您的自定义端口号而不是
4000
- 使用您的自定义端口号而不是
- 现在,在移动设备上,您可以导航到
http://localhost:4000/
,它实际上将连接到笔记本电脑,而不是移动设备
看到这里的说明。
缺点是,这种方法一次只能使用一台移动设备 。 如果你想访问另一个移动设备,你必须先断开第一个(禁用USBdebugging ),连接新的(启用USBdebugging ),并再次运行adb reverse tcp:4000 tcp:4000
。
ngrok(适用于所有设备)
应该始终工作的另一个解决scheme是ngrok (如其他答案中所述)。 它通过互联网工作,而不是本地networking。
这非常容易使用:
brew cask install ngrok ngrok http 4000
这输出,在其他一些信息,像一条线
Forwarding http://4cc5ac02.ngrok.io -> localhost:4000
现在,您可以在连接到Internet的任何设备上导航到http://4cc5ac02.ngrok.io
,并且该URLredirect到您笔记本电脑的localhost:4000
。
请注意,只要ngrok命令正在运行(直到您按下Ctrl-C ),您的项目才会公开投放。 每个有URL的人都可以看到它。
最后在Ubuntu上完成,我正在localhost:8080上运行nodejs服务器
1)打开terminaltypesifconfig你会得到像这样的ip:inet addr:192.168.43.17
2)现在简单地把url地址这样写成:“192.168.43.17:8080”(8080端口来自localhost端口号)ex:“192.168.43.17:8080/fetch”
使用connectify
和xampp
或等效,并在移动URL栏上inputIP地址进行访问
就个人而言,我不坚持在使用设备时使用本地主机,没有简单的解决scheme。
只要开始连接到可以使用模拟器的本地主机的活动即可。 无论您需要从设备获取的信息都可以轻松生成,并可以作为参数发送到活动。
什么工作对我来说(目标:debugging运行在本地主机上的Windows服务器应用程序:99999从Android手机上运行的客户端应用程序)
- 电话和电脑连接在同一networking上,例如192.168.1.xxx(通过WiFi连接在我的情况)
- 在Windows防火墙中启用端口99999
- 以pipe理员身份在cmd中运行:netsh http add urlacl url = http:// *:99999 / user = Everyone
那么服务应用程序url(my_dev_machine_ip:99999 / path_to_service)可以从手机访问。
为未来的开发者添加解决scheme。
复制你的IP地址的地址。 右键点击你的networking – >networking和共享 – >点击你现在有的连接 – >详细信息 – >然后ipv4地址旁边的地址就是你的ip地址,记下这个地方
去控制面板 – >系统和安全 – > Windows防火墙 – >高级设置 – >入站规则 – >新规则(按照步骤添加一个端口,例如80,其真正简单的遵循)
把你记下的ip地址logging在你的手机浏览器上,并把你创build的规则的端口号放在旁边。 例如192.168.0.2:80和瓦拉。
如果没有连接,可能的解决scheme。 右键点击networking – >打开networking和共享 – >查看下你的活动连接,在连接types的连接名下查看,如果是公共的,点击它,并确保将其更改为家庭networking。
它非常简单, – GOTO命令行(Window + R [typescmd]) – typesIPCONFIG,将显示您的PC的当前IP地址 – 在您的Android手机的浏览器上写入IP地址:80 eg( http:// 192.168.xx:80 )
完成
本地主机将出现在您的手机上
最简单的方法(这对我来说是完美的)是在本地托pipe你的站点在0.0.0.0:<port_no>
并使用移动设备访问它,在浏览器中使用<local_ipv4_address>:<port_no>/<path>
。
- 要知道您的本地ipv4地址,只需在cmd中键入
ipconfig
- 任何连接到同一networking的设备都可以访问此url。