我可以使用 Android 模拟器访问我的笔记本电脑网络服务器,我正在使用 10.0.2.2:portno
运行良好。
但是当我连接我真正的安卓手机时,手机浏览器无法连接到我笔记本电脑上的同一个网络服务器。手机使用 USB 数据线连接到笔记本电脑。如果我运行 adb devices 命令,我可以看到我的手机。
我错过了什么?
USB 不为移动设备提供网络。
如果您的桌面和手机都连接到同一个 WiFi(或任何其他本地网络),则使用路由器分配的桌面 IP 地址(不是 localhost
和 127.0.0.1
)。
要找出您桌面的 IP 地址:
在 Linux 上的命令行中输入 ipconfig (Windows) 或 ifconfig (Unix) 单行 ifconfig | grep "inet" | grep -v 127.0.0.1 只会产生重要的东西,有很多关于如何在 Windows 上获得类似输出的建议
Linux 上的单行 ifconfig | grep "inet" | grep -v 127.0.0.1 只会产生重要的东西
有很多关于如何在 Windows 上获得类似输出的建议
会有一堆IP
尝试所有这些(除了前面提到的 localhost 和 127.0.0.1)
如果您的手机已连接到移动网络,那么事情会变得更加困难。
要么去铁杆:
首先找出您的路由器外部 IP 地址 (https://www.google.de/search?q=myip)
然后,在路由器上,将某个端口转发到 <您的桌面 IP>:<服务器端口号>
最后使用外部IP地址和转发端口
注意:ifconfig
命令已被弃用,因此默认情况下在 Debian Linux 上缺失,从 Debian stretch 开始。在 Debian Linux 上检查网络配置的新推荐替代方法是 ip 命令。例如,要使用 ip 命令显示网络配置,请运行以下命令:
ip address
上面的ip命令可以简写为:
ip a
如果您仍喜欢将 ifconfig
用作日常系统管理例程的一部分,则可以轻松地将其安装为 net-tools
软件包的一部分。
apt-get install net-tools
参考是 here
其实很简单。
打开您的 Android 手机/路由器的 WiFi 热点并将您的笔记本电脑连接到您的手机
在 localhost 启动您的服务器(我正在使用 Windows 的 WAMP 服务器)
现在打开命令提示符并输入
ipconfig
完成后,您将看到类似以下内容:
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
复制 IPv4 地址(在本例中为 192.168.43.76)
在您的移动浏览器中,只需粘贴 IPv4 地址
注意:请将您的网络设置为“家庭网络”。将网络设置为家庭网络意味着您允许您的 PC 与同一网络上的其他设备共享内容。
如果您使用的是 Windows 10,则可以通过以下方式完成:
打开设置
转到网络和互联网
在左侧菜单中选择 WiFi
点击已连接 WiFi 的名称
将网络的网络配置文件设置为私有
如果您遇到问题,很可能与 Windows 防火墙有关。
打开控制面板
转到 Windows Defender 防火墙
点击允许应用程序或功能通过 Windows Defender 防火墙
检查应用程序是否启用了私有网络(应该有一个勾号)
如果未启用,请点击更改设置并勾选应用程序私有下的复选框
使用简单的解决方案(只需从移动设备访问 laptop_ip_addr:port
,当手机和笔记本电脑在同一个 WiFi 上时),我会收到 ERR_CONNECTION_REFUSED 错误。也就是说,我的 MacBook 似乎拒绝来自我的手机的连接尝试。
ADB 反向套接字(仅限 Android)
该解决方案适用于我(使用 MacBook 测试):
使用 USB 电缆将 Android 移动设备连接到笔记本电脑 在移动设备上启用 USB 调试 在笔记本电脑上,运行 adb reverse tcp:4000 tcp:4000 使用您的自定义端口号而不是 4000 现在,在移动设备上,您可以导航到 http:// localhost:4000/,它实际上将连接到笔记本电脑,而不是移动设备
请参阅说明 here。
缺点是这只适用于一次只有一个移动设备。如果你想用另一个移动设备访问,你必须先断开第一个(禁用USB调试),连接新的(启用USB调试),然后运行{ 1} 再次。
编辑:据报道,此解决方案也适用于 Windows。
ngrok(适用于所有设备)
另一个应该始终有效的解决方案是 ngrok (如其他答案中所述)。它在 Internet 上工作,而不是在本地网络上工作。
它非常易于使用:
brew cask install ngrok
ngrok http 4000
除了一些其他信息之外,这会输出一行,如
Forwarding http://4cc5ac02.ngrok.io -> localhost:4000
现在,您可以在任何连接到 Internet 的设备上导航到 http://4cc5ac02.ngrok.io
,此 URL 将重定向到您笔记本电脑的 localhost:4000
。
请注意,只要 ngrok 命令正在运行(直到您按下 Ctrl-C),您的项目就会被公开提供。拥有该 URL 的每个人都可以看到它。
Mac OS X 用户
我通过启用远程管理实现了这一点:
确保您的手机和笔记本电脑连接到同一个 WiFi 网络
在 Mac 上,转到系统偏好设置/共享
启用远程管理
您将看到与此类似的消息:
其他用户可以使用地址 some.url.com 管理您的计算机
在您的 Android 设备上,您现在应该可以访问 some.url.com
,它代表您 Mac 上的 localhost
。您还可以使用 ifconfig
获取 Mac 的 IP 地址。
使用 ngrok 的便携式解决方案(任何带有 Node.js 的操作系统)
如果您不介意使用临时域公开您的项目,您可以使用 ngrok
。假设我有一个在 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
作为远程查看 localhost
的一种方式。这非常适合与客户分享设计工作或进展。
使用 nginx 代理通行证的替代解决方案
如果您通过 nginx proxy_pass
运行类似的东西,则需要进行更多调整 - 这是一种 hacky 方法,但它适用于我,我愿意接受有关改进它的建议:
启用远程管理(如上所述)
暂时将服务器设置为侦听端口 81 而不是 80
输入以下命令:
sudo nginx -s reload
访问 http://youripaddress:81
server {
listen 80;
listen 81; # <-------- add this to expose the app on a unique port
server_name ~^(local|local\.m).example.com$;
# ...
}
重新加载并访问 http://youripaddress:81
192.168.0.101
时有效,但主机名无效。
当您的移动设备和计算机不在同一网络中时,此解决方案可用:
https://i.stack.imgur.com/bBpUz.jpg
单击端口 fowading 按钮,然后将随机端口设置为 3000 到您的笔记本电脑使用的端口,例如 8080。
https://i.stack.imgur.com/suqpB.png
现在使用 localhost:3000 从设备访问笔记本电脑中的 localhost:8080(or_whatever_ip:portno)。您可以在手机浏览器中查看。在移动浏览器中尝试 localhost:3000。确保选中“端口转发设置”窗口中的“启用端口转发”复选框
在 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 文件中有访问互联网的权限:
<uses-permission android:name="android.permission.INTERNET"/>
java.io.FileNotFoundException: http://192.168.8.65:8000/app/web/users/
我找到了一个快速解决这个问题的方法。试试这个link。它应该可以帮助您解决问题。
我只更改了一件事,教程指出您将“127.0.0.1”更改为“全部”,将其更改为您的服务器正在运行的 IP 地址。
之后,您应该能够连接到您的本地主机。
以下是链接页面中信息的(校对)副本:
步骤1
安装 Wamp 服务器(或您喜欢的任何其他服务器)。
这是我所知道的设置本地服务器的最佳服务器之一。如果您已安装 Apache 或任何其他服务器,请忽略此步骤。
从这里下载并安装 Wamp Server。
第2步
在 Windows 防火墙中为端口 80 添加新规则。
打开控制面板并选择 Windows 防火墙。从 Windows 防火墙设置页面的左侧面板中选择高级设置。从左侧面板中选择入站规则,然后选择新建规则。选择端口并单击下一步。选择“特定本地端口”单选按钮并输入 80 作为端口值。保持允许连接不变并进入下一步。保持配置文件选项不变,然后单击下一步。为您的新规则起一个好听的名称,然后单击完成。
这将启用对本地网络 IP 的端口 80 访问。
第 3 步
编辑 Wamp 服务器的 httpd.conf 文件以修复 403 错误。
我们需要编辑这个文件。否则,当我们通过本地网络 IP 访问 localhost 时,会出现 403 禁止错误。
单击 Wamp 服务器托盘图标。打开 Apache 服务器子菜单。选择 httpd.conf。在 httpd.conf 文件中找到这部分配置: Directory “c:/wamp/www/” # # Options 指令的可能值为“None”、“All”、# 或以下任意组合: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # 注意“MultiViews”必须*明确地命名* — “Options All” # 不会给你。 # # Options 指令既复杂又重要。请参阅 # http://httpd.apache.org/docs/2.2/mod/core.html#options # 了解更多信息。 # Options Indexes FollowSymLinks # # AllowOverride 控制哪些指令可以放在 .htaccess 文件中。 # 它可以是“All”、“None”或关键字的任意组合: # Options FileInfo AuthConfig Limit # AllowOverride all # # 控制谁可以从此服务器获取内容。 # # onlineoffline 标签 - 不要从 127.0.0.1 中删除 Order Deny,Allow Deny from all Allow
查找“127.0.0.1”并将其替换为“全部”,保存文件,然后重新启动 Wamp 服务器。
第4步
查找您的本地网络 IP。
打开命令提示符。键入并输入 ipconfig 命令。就我而言,我的局域网地址是 10.0.0.2。
这是您通过 wifi 访问 Android 手机上的本地主机所需的 IP。要测试它是否正常工作,请在安装了本地主机服务器的桌面浏览器中输入此 IP 地址。浏览器应该会成功显示您的 localhost 页面。这将确保此本地网络 IP 现在可以在您的 Android 手机上成功访问。
我希望本教程能帮助您通过 wifi 访问您的 localhost。
# onlineoffline tag - don't remove Order Allow,Deny Allow from all
然而,有一个更好的解决方案。您可以使用 IP 地址“10.0.2.2”访问您的主机。这是由 Android 团队以这种方式设计的。因此,您的网络服务器可以在 localhost 上完美运行,并且您可以从您的 Android 应用程序通过“http://10.0.2.2:8080”访问它。
由于这是一个老问题,因此有一种非常简单的新方法可以做到这一点。下载 ADB Chrome Extension,然后按照以下说明操作:
https://developers.google.com/chrome-developer-tools/docs/remote-debugging
“Android 版 Chrome 上的端口转发使您可以轻松地在移动设备上测试您的开发站点。它通过在您的移动设备上创建一个侦听 TCP 端口来工作,该端口映射到您的开发机器上的特定 TCP 端口。这些端口之间的流量通过 USB 传输,因此连接不依赖于您的网络配置。”
更多详细信息:https://developer.chrome.com/devtools/docs/remote-debugging#port-forwarding
以管理员身份运行 CMD
并在 CMD 屏幕上键入 ipconfig,屏幕将显示文本
https://i.stack.imgur.com/hhIGv.png
并且您可以使用此 ip 访问您的本地主机,您必须连接到与您的 PC 连接到相同的网络
适用于 Windows 的解决方案:
您无法查看您的网站,主要是因为您的防火墙(默认操作系统防火墙或防病毒防火墙)阻止了传入连接。
在 Windows 防火墙上:
要允许特定端口上的传入连接,请转到:
控制面板 > Windows Defender 防火墙 > 高级设置 > 右键单击入站规则 > 添加新规则。然后: 选择“端口”单选按钮。输入您要启用传入连接的特定端口/范围(您的服务器正在运行的端口)选择“允许连接”单选按钮。单击下一步(除非您想更改默认值)为您的规则命名,然后单击完成。
笔记:
如果您使用的是具有防火墙的防病毒软件,则上述步骤将不起作用,因为防病毒软件会禁用 Windows 防火墙,而是运行自己的防火墙。
在这种情况下,根据防病毒程序,转到防病毒软件的防火墙设置并打开端口。
您可能让您的网络服务器在您的环回接口而不是您的网络接口上侦听。这方面的主要迹象是:
点击 127.0.0.1 和 localhost(来自 localhost 或 Android 模拟器)工作
对 192.168.xxx.xxx 的点击不起作用,无论是来自 localhost、LAN 还是 WAN
我在答案 here 中详细讨论了诊断和解决此问题。
尝试转到此文件: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 地址。
在您的 ubuntu/Macbook 中使用它来获取系统的 IP 地址。您的手机和系统应该在同一个网络中
ip addr | grep inet
这将为您提供一个类似于 192.168.168.46
的 IP 地址。在您的智能手机中使用它。
希望这可以帮助。
我使用了这个过程:
在 PC 上安装 Fiddler
按照这些出色的说明设置 PC 和 Android 设备
只需在 Android 设备上的浏览器中输入 http://ipv4.fiddler 即可访问 localhost
请注意,此过程要求您在每次会话开始和结束时更改 Android 设备上的 WiFi 设置。我发现这比扎根我的 Android 设备更痛苦。
ngrok 可让您将 localhost 放到临时服务器上,并且设置起来非常简单。我在这里提供了一些步骤,可以在链接中找到:
从上面的链接下载 ngrok zip 打开 zip 在本地运行您的服务器并记下端口号 在终端中,转到 ngrok 所在的文件夹并输入 ngrok http [端口号]
您将在终端中看到一个小仪表板,其地址指向您的本地主机。将您的应用程序指向该地址并构建到您的设备。
终于在 Ubuntu 中完成了,我在 localhost:8080 上运行 nodejs 服务器
1) 打开终端类型 ifconfig 你会得到类似这样的 ip:inet addr:192.168.43.17
2)现在简单地输入这样的url地址:“192.168.43.17:8080”(8080端口来自本地主机端口号)例如:“192.168.43.17:8080/fetch”
默认 localhost 的更简单方法是使用 http://localhost:port。这也适用于笔记本电脑和 Android。
如果它不起作用,那么在 android 中将手机的默认 IP 设置为 127.0.0.1:port :)
打开终端并输入:-
hostname -i
#127.0.0.1
hostname -I
#198.168.*.*
如果您使用的是真实设备并且仍然遇到问题,请按照以下步骤操作,因为这些步骤可以帮助我解决问题:
确保移动设备和笔记本电脑都在同一个 WiFi 网络上。验证您的目标 URL 是否有端口号,如下所示:https://localhost:44301 在 Android Studio 终端上运行此命令, adb reverse tcp:44301 tcp:44301 将 44301 替换为您的端口号
希望您能够毫无问题地运行。
Happy codding
adb reverse tcp:<myport> tcp:<myport>
基于我的笔记本电脑将我的移动设备连接到我的 wamp 服务器的解决方案:
首先,wifi不是路由器。因此,要将我的移动设备连接到我笔记本电脑上基于 localhost 的 wamp 服务器,我需要一个路由器。我已经下载并安装了一个免费的虚拟路由器:https://virtualrouter.codeplex.com/
配置它非常简单:
右键单击系统托盘中的虚拟路由器图标单击配置虚拟路由器如果您的互联网连接在以太网中,请填写密码,选择共享连接:以太网然后在您的笔记本电脑和设备上设置 wifi 在您的设备上连接到虚拟路由器网络名称
然后,您可以通过启动浏览器通过您的设备连接到您的笔记本电脑并填写笔记本电脑的 IPV4 地址(要在 Windows 上找到它,输入 cmd : ipconfig,然后找到 ipv4 地址)
您应该会看到您的 wamp 服务器主页。
使用几个不同的本地主机服务器遇到了这个问题。最终,只需使用 Python 简单服务器,我的应用程序就可以在几秒钟内在手机上启动并运行。它只需要几秒钟,所以在进入任何更复杂的解决方案之前值得一试。首先,确保您已安装 Python。 cmd+r
并在 Windows 中输入 python
或在 mac 终端中输入 $ python --version
。
下一个:
cd <your project root>
$ python -m SimpleHTTPServer 8000
然后只要在网络上找到你的主机地址,我在mac上使用System Preferences/Sharing
找到它。将其点按到您的 Android 设备中,应该会加载您的 index.html
,您应该会很好。
如果不是,则问题出在其他问题上,您可能需要研究其他一些建议的解决方案。祝你好运!
* 编辑 *
如果您使用的是 Chrome,另一个可以尝试的快速解决方案是 Web Server for Chrome 扩展。我发现这是一种在手机上访问 localhost 的快速且超级简单的方法。只需确保选中 Options
下的 Accessible to local network
,它应该可以在您的手机上正常工作,没有任何问题。
https://i.stack.imgur.com/8rOPW.png
这对我有用,我在 127.0.0.1 ip 之后添加了另一行来指定我想使用的设备的确切本地网络 IP 地址(不是公共 IP 地址)。就我而言,我的三星 Galaxy S3
根据 Bangptit 的建议,编辑 httpd.conf 文件(x 是版本号): C:\wamp\bin\apache\Apache2.xx\conf\httpd.conf
搜索 onlineoffline 标签并添加你手机的 ip(我在我的路由器配置页面中找到了我的手机 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。
然后,使用以管理员身份运行打开命令提示符
给出 ipconfig 命令
哪个显示无线局域网ip
使用服务器的 ip:port 访问手机
最简单的方法(这对我来说完美无缺)是在 0.0.0.0:<port_no>
本地托管您的网站并使用移动设备访问它,在浏览器中使用 <local_ipv4_address>:<port_no>/<path>
。
要知道你本地的 ipv4 地址,只需在 cmd 中输入 ipconfig
任何连接到相同网络的设备都可以访问此 URL。
Ngrok 是最佳解决方案。如果您正在开发 PHP,那么我建议安装 Laravel Valet,它有 MacOS 和 Linux 版本,那么您可以使用 valet share
命令。如果你正在开发任何前端技术并且需要共享一个像 3000 这样的端口,那么直接使用 ngrok ngrok http 3000
Xampp & ngrok
您还可以在 Windows 中将 ngrok 与 Xampp 一起使用。您可以使用以下过程。这很容易和简单。
在 ngrok 上注册一个免费帐户 从下载部分下载 ngrok 文件并打开它
请注意您的 Apache 服务器正在运行的端口。我的情况是80
https://i.stack.imgur.com/ONQXF.png
在 ngrok 命令行中,输入 ngrok http YOUR_PORT 并复制转发地址
现在您可以在任何设备(即您的物理 android 设备)上使用此转发链接,它将托管您的 localhost 服务器。例如,
代替
http://localhost/my-files/
和
http://YOUR_FORWARDING_ADDRESS/my-files/
首先让你的机器(服务器运行的地方)IP地址是静态的。在 android 代码中输入此静态 IP 地址。接下来转到您的wifi路由器界面并检查左侧面板。您将看到诸如端口转发/转发之类的选项。单击它并转发端口 80。现在编辑您的 htttpd.conf
文件并将其编辑为
全部允许
.重新启动您的服务器。现在一切都应该正常了。
此外,您可以保留机器的 IP 地址,以便始终分配给您。在路由器界面的左侧面板中,找到 DHCP -> Address Reservation
,单击它。输入您机器的 MAC 地址和您在代码中输入的 IP 地址。点击保存。这将为您的机器保留给定的 IP 地址。
为未来的开发人员添加解决方案。
复制您的IP地址的地址。右键单击您的网络->网络和共享->单击您当前拥有的连接->详细信息->然后ipv4地址旁边的地址是您的IP地址,请在某处记下
转到控制面板 -> 系统和安全 -> windows 防火墙 -> 高级设置 -> 入站规则 -> 新规则(按照步骤添加端口,例如 80,它真的很简单)
将您在手机浏览器上记下的 IP 地址和您为其创建规则的端口号放在旁边。例如 192.168.0.2:80 和 wala。
如果它没有连接可能的解决方案。右键单击网络->打开网络和共享->查看活动连接,在连接类型下的连接名称下,如果它是公共的,请单击它,并确保将其更改为家庭网络。
虽然一个答案已被接受,但这对我有用:
确保您的计算机和安卓设备都在同一个网络上。获取您计算机的 IP 地址。 (如果在终端内使用 mac 类型 ifconfig 并查找 en0/en1 -> inet 它应该类似于 19*.16*.1.4。)(在 Windows 上,使用 `ipconfig)打开您的移动设置并转到网络 ->长按您的wifi网络->修改网络->向下滚动到高级选项->选择代理手册并在代理主机名中输入您的地址,即19*.16*.1.4内部端口输入您的端口。并保存它。在谷歌浏览器中搜索我的 ip 并获取你的 ip,假设它是 1**.1**.15*.2** 尝试访问 1**.1**.15*.2**:端口/来自您的移动设备。
就这么简单。
什么对我有用(目标:从运行在 android 手机上的客户端应用程序调试在 localhost:99999 上运行的 Windows 服务器应用程序)
手机和电脑连接在同一网络上,例如 192.168.1.xxx(在我的情况下通过 wifi 连接)在 Windows 防火墙中启用端口 99999,以管理员身份在 cmd 中运行:netsh http add urlacl url=http://*:99999/ user=每个人
然后可以从手机访问服务应用程序 url (my_dev_machine_ip:99999/path_to_service)。
不定期副业成功案例分享