我可以使用Android模拟器访问我的笔记本电脑web服务器,我使用10.0.2.2:portno 工作得很好。

但当我连接真正的Android手机时,手机浏览器无法连接到我笔记本电脑上的同一个web服务器。手机和笔记本电脑通过USB线连接。如果我运行 adb devices命令,我可以看到我的手机。

我错过了什么?


当前回答

为未来的开发人员添加解决方案。

ip地址的副本地址。右键单击您的网络->网络和共享->单击您当前拥有的连接->详细信息->然后ipv4地址旁边的地址是您的IP地址,请在某处注意这一点

进入控制面板->系统和安全-> windows防火墙->高级设置->入站规则->新规则(按照步骤添加端口,例如80,它真的很简单)

将您在手机浏览器中记下的IP地址和您为其创建规则的端口号放在旁边。例如192.168.0.2:80和wala。

可能的解决方案,如果它不连接。 右键点击网络->打开网络和共享->查看您的活动连接,在您的连接类型的名称下单击它,如果它是公共的,并确保将其更改为家庭网络。

其他回答

为未来的开发人员添加解决方案。

ip地址的副本地址。右键单击您的网络->网络和共享->单击您当前拥有的连接->详细信息->然后ipv4地址旁边的地址是您的IP地址,请在某处注意这一点

进入控制面板->系统和安全-> windows防火墙->高级设置->入站规则->新规则(按照步骤添加端口,例如80,它真的很简单)

将您在手机浏览器中记下的IP地址和您为其创建规则的端口号放在旁边。例如192.168.0.2:80和wala。

可能的解决方案,如果它不连接。 右键点击网络->打开网络和共享->查看您的活动连接,在您的连接类型的名称下单击它,如果它是公共的,并确保将其更改为家庭网络。

USB不为移动设备提供网络。

如果你的桌面和手机都连接到同一个WiFi(或任何其他本地网络),那么使用路由器分配的桌面IP地址(不是localhost,也不是127.0.0.1)。

要找出您的桌面的IP地址:

在命令行输入ipconfig (Windows)或ifconfig (Unix) 在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地址和转发端口

否则使用类似xip的东西。IO或ngrok。

注意:ifconfig命令已经弃用,因此在Debian Linux上默认没有,从Debian扩展开始。在Debian Linux上检查网络配置的新的推荐替代方法是ip命令。例如,使用ip命令显示网络配置,执行如下命令:

ip address

以上ip命令可以缩写为:

ip a

如果您仍然喜欢使用ifconfig作为日常系统管理程序的一部分,您可以轻松地将其作为net-tools包的一部分安装。

apt-get install net-tools

参考资料在这里

使用USB线:

(例如,如果使用WAMP服务器):

1)在你的电脑上安装你的Android驱动程序,下载便携式Android Tethering反向工具,并通过反向工具应用程序连接你的Android设备。

2)点击WAMP图标>上线(重启后)。

3)在Android浏览器中打开你的IP(即http://192.168.1.22或http://164.92.124.42)

要找到您的本地IP地址,单击“开始>运行>cmd并输入ipconfig,您的IP地址将显示在输出中。

这是所有。现在你可以从Android访问(打开)localhost。

使用简单的解决方案(只需从移动设备访问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/,它实际上会连接到笔记本电脑,而不是移动设备

请看这里的说明。

缺点是这只能在一个移动设备上使用。如果你想用另一个移动设备访问,你必须先断开第一个设备(关闭USB调试),连接新的设备(打开USB调试),然后再次运行adb reverse tcp:4000 tcp:4000。

编辑:据报道此解决方案也适用于Windows。


Ngrok(适用于所有设备)

另一个应该总是有效的解决方案是ngrok(在其他答案中提到过)。它通过Internet工作,而不是本地网络。

它非常容易使用:

brew install ngrok
ngrok http 4000

在其他一些信息中,输出如下一行

Forwarding                    http://4cc5ac02.ngrok.io -> localhost:4000

现在,您可以在任何连接到Internet的设备上导航到http://4cc5ac02.ngrok.io,这个URL重定向到您笔记本电脑的localhost:4000。

请注意,只要ngrok命令正在运行(直到您按下Ctrl-C),您的项目就是公共服务的。所有拥有URL的人都可以看到它。

我使用了这个过程:

在PC上安装Fiddler 按照这些优秀的说明设置PC和Android设备 只需在Android设备上打开浏览器,输入http://ipv4.fiddler访问本地主机

注意,这个过程需要你在每次会话开始和结束时更改Android设备上的WiFi设置。我发现这比我的Android设备更轻松。