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

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

我错过了什么?


当前回答

首先,让你的机器(服务器运行的地方)IP地址是静态的。在android代码中输入此静态IP地址。 接下来进入你的wifi路由器接口,检查左边的面板。您将看到端口转发/转发等选项。点击它并转发端口80。 现在编辑httpd .conf文件,并将其编辑为

所有人允许

. 重新启动服务器。现在一切都可以正常工作了。

此外,您可以保留您的机器的IP地址,以便始终分配给您。 在路由器接口的左面板中,找到DHCP -> Address Reservation,单击它。输入计算机的MAC地址和您在代码中输入的IP地址。单击保存。这将为您的机器保留给定的IP地址。

其他回答

在linux上使用ip addr而不是ifconfig,因为ifconfig已弃用多年,并且在最近的发行版中没有默认安装

Ngrok是最好的解决方案。 如果你正在开发PHP,那么我建议安装Laravel Valet,它有MacOS和Linux版本,然后你可以使用Valet共享命令。如果你正在开发任何前端技术,需要共享一个端口,比如3000,那么直接使用ngrok


Xampp和ngrok

你也可以在Windows中使用ngrok和Xampp。您可以使用以下流程。这很简单。

在ngrok上注册一个免费账户 从下载部分下载ngrok文件并打开它

注意Apache服务器运行的端口。我的情况是80

在ngrok命令行中输入ngrok http YOUR_PORT并复制转发地址

现在你可以在任何设备上使用这个转发链接(即你的物理android设备),它将托管你的本地主机服务器。例如,

取代

http://localhost/my-files/

with

http://YOUR_FORWARDING_ADDRESS/my-files/

虽然有一个答案已经被接受,但这对我来说很管用:

Make sure both your computer and android device are on same network. get your computer's ip address. (in case of mac type ifconfig inside terminal and look for en0/en1 -> inet it should be something like 19*.16*.1.4.) (on windows, use `ipconfig) Open your mobile settings and go to network-> long press your wifi network-> modify network -> scroll down to advanced options -> chose proxy manual and in proxy hostname type your address i.e. 19*.16*.1.4 inside port enter your port. and save it. search for what is my ip in google chrome, and get your ip, lets say it is 1**.1**.15*.2** try accessing 1**.1**.15*.2**:port/ from your mobile device.

事情就是这么简单。

以上的方法对我不起作用。Mac是这样的:

在终端:

ifconfig

然后把inet后面的数字放到手机浏览器里:

使用简单的解决方案(只需从移动设备访问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的人都可以看到它。