从 USB 连接的 Android 移动设备访问 PC 的本地主机

Posted

技术标签:

【中文标题】从 USB 连接的 Android 移动设备访问 PC 的本地主机【英文标题】:Accessing localhost of PC from USB connected Android mobile device 【发布时间】:2012-04-10 20:54:35 【问题描述】:

我有一个安卓设备(三星 Galaxy 标签)通过 USB 连接到我的电脑。

我想使用 WebServices 并在我的 android 设备上运行位于我的 PC 的本地 xampp 服务器上的网页。

如果我的电脑和安卓设备都连接在同一个无线网络上,我可以实现它。

但是是否可以在没有任何无线连接的情况下访问本地主机页面,只使用 USB 连接。

(PS:当我在模拟器上运行应用程序并使用 ip 10.0.2.2 访问我的 PC 上的本地主机时,同样的情况也适用)

【问题讨论】:

请使用下面的链接***.com/questions/4779963/…它对我有用。 在测试您的网页时关闭防火墙或在防火墙设置中将您的 ip 添加到受信任的网络中。 查看此博客mycodingchannel.in/blog/…了解详情 【参考方案1】:

检查 USB 连接类型选项。你应该有一个叫做“Internet pass through”。这将使您的手机使用与 PC 相同的连接。

【讨论】:

这是我所知道的通过 USB 使用 PC 连接的唯一方法。因此,对于您的设备,我想答案是否定的。模拟器之所以有效,是因为它共享您的 PC 连接。 我知道带有 Sense 3 的新 HTC 设备可以选择(Ex the Sensation) 非常感谢您的帮助。仍在检查任何选项是否有效。【参考方案2】:

我终于解决了这个问题。我将三星 Galaxy S 与 Froyo 一起使用。下面的“端口”与您用于模拟器的端口相同(10.0.2.2:端口)。 我做了什么:

    首先使用 USB 数据线连接您的真实设备(确保您可以将应用上传到您的设备上) 从你连接的设备获取IP地址,以192.168.x.x:port开头 打开“网络和共享中心” 点击设备中的“本地连接”并选择“详细信息” 将“IPv4 地址”复制到您的应用并替换为:http://192.168.x.x:port/test.php 将您的应用(再次)上传到您的真实设备 转到属性并打开“USB 网络共享” 在设备上运行您的应用程序

它现在应该可以工作了。

【讨论】:

如果我这样做,我会得到一个未知的主机异常。 似乎这个答案虽然有效,但假设 Android 设备和计算机都连接到无线接入点,这与作者试图实现的目标相反。 需要注意的是,这是一个仅限 Windows 的解决方案。 我同意@Jacob,这不能回答问题。问题本身表明他可以通过 wifi 连接。 这没有回答问题。这是正确的答案:***.com/a/53920173/2947592【参考方案3】:

这是我的 Android 应用的一段代码:

此应用能够与运行在服务器上的 servletAndroid 设备之间的 HTTP get-post 模型进行通信> 插入 USB 可调试模式(因为应用程序正在开发中)。

我还可以在服务器 Tomcat Apache 7 上运行时通过 Wi-Fi 运行应用程序(应用程序开发完成后)。

获取你的IP地址

    转到命令提示符 输入ipconfig 回车

在列表中,IPv4 地址 是您的 IP。

【讨论】:

这是不准确的。 USB 可调试模式不提供网络连接,ADB 转发也不会允许设备联系 PC。从外观上看,您正在使用可能由网络共享工具提供的 USB 网络连接,而不是 USB 调试。另一种选择是通过 ADB 转发隧道 ssh。 我不是说usb-debugable模式提供网络连接。但不幸的是,这是执行从 android 应用项目到嵌入到 Android Studio 的 Web 服务器的一些内部命令的唯一方法。感谢您的关注,新开发人员可能会感到困惑。编辑为Android Studio中开发进度的应用。 这里仍然没有答案提供一种方法来实现这个方向的连接。 “USB 可调试模式”不能做到这一点,因此如果没有准确描述你是如何做到的,这里没有解决方案【参考方案4】:

我已经阅读了许多论坛并尝试过播放应用程序,但直到现在才找到解决方案。

我相信我的情况与您的情况相似,但我会澄清以帮助其他人。我有一个本地托管的网站和 Web 服务供我的 android 应用程序使用。我需要在路上进行演示,只用我的笔记本电脑,没有网络连接。

注意:使用我的 iPhone 作为 wifi 热点并连接我的电脑和我的 android 设备工作正常,但 iPhone 4S 连接速度很慢并且经常掉线。

我的解决方法如下:

拔掉电脑上的网线,关闭wifi。 关闭安卓设备上的wifi 通过 USB 将安卓连接到电脑 在安卓菜单中打开“USB Tethering”。 (在网络下->更多...->网络共享和便携式热点”) 获取已由 USB 系绳电缆分配的计算机 IP。 (打开命令提示符并输入“ipconfig”,然后查找 USB 网络适配器分配的 IP) 使用找到的 IP 地址而不是 localhost 在 PC 上打开浏览器进行测试。即http://192.168.1.1/myWebSite 在安卓上打开浏览器测试一下

【讨论】:

我有 Nexus 10,但我无法让它为我工作,但我非常需要它。没有网络共享选项!? 我的moto g5s plus也有问题。我分配的还是不行。【参考方案5】:

我在 Windows 电脑上做了这个,效果很好!

在您的手机中开启 USB Tethering。 在计算机的命令提示符中键入 ipconfig 并找到“以太网适配器本地连接 x”的 ipv4(主要是第一个) 现在转到您的移动浏览器,键入该 ipv4 和您的 Web 应用程序的端口号。例如:- 192.168.40.142:1342

用这些简单的步骤就可以了!

【讨论】:

【参考方案6】:

通过USB线连接安卓手机并访问电脑上的http服务器。

    防火墙 - 将其关闭,一旦一切正常,您就可以添加规则 在入站规则下,启用 Apache HTTP 服务器(UDP 和 TCP)(或您正在使用的任何 HTTP 服务器)警告 - 如果您关闭防火墙,您的计算机将容易受到互联网攻击。因此,请先关闭互联网并断开与网络的连接。 您无需连接互联网即可使用,因为您要连接本地网络上的两台设备。

    插入 USB 数据线。如果弹出网络窗口,请选择家庭网络。如果它没有弹出它可能设置为公共(这不起作用),所以转到:控制面板\网络和Internet\网络和共享中心(在win7中)并将其设置为家庭网络。在您按下它以共享图片、音乐后,它可能会给您一个下一个屏幕……只需单击取消即可。在主屏幕上,家庭网络仍将处于活动状态。

    您需要的计算机的 IP、localhost 或其他别名不起作用。要获取您机器的 IP,请启动 Windows 命令行 shell(按 Windows 键 + R 并键入 cmd),应弹出黑色命令提示符窗口,键入:“ipconfig”并回车。现在寻找

IPv4 地址。 . . . . . . . . . . : 192.168.###.### 这是您的手机分配给您计算机的 IP

    现在您应该完成了,在手机的浏览器中,尝试从您的计算机服务器访问一个测试 html 文件,它应该可以正常显示。

    现在一切正常,您可能需要在您的计算机上启用防火墙和 Internet 访问。现在尝试再次访问您的 http 服务器。它可能行不通。根据您的设置,您可能会收到一个弹出窗口,要求您添加规则以允许它,但如果您不这样做,请自行添加。启动 windows 防火墙并转到入站规则(因为它是服务器)并添加新规则。选择“程序”。找到您的 http 服务器的 exe,并在下一个屏幕中确保选择了允许。再次尝试连接,现在它应该可以工作了。如果不是,可能是因为您选择了错误的 exe。您甚至可以更高级地限制外部使用(因为现在互联网上的每个人都可以访问它,如果他们有您的互联网 IP 地址)要限制访问,您可以右键单击刚刚创建的新规则,单击属性,然后转到范围选项卡并相应地更改那里的内容。

    Android 开发者请注意,现在在您的 android 代码中,您必须使用“http://”,否则将无法正常工作。例如:MyAsyncTask.execute("http://192.168.123.123/test.html")

第二部分——将 IP 设置为固定/静态。

现在一切正常,每次拔下电缆并重新插入时,您的 IP 都会改变。而且,如果您在代码中之类的地方使用它,则每次都必须更新它!我想出的解决方案是将 IP 设置为静态。

    将手机连接并绑定后,返回网络和共享中心并单击本地连接“连接:”

    在下一个屏幕上选择“属性”,然后突出显示 IP 4 并在那里按属性,然后单击“使用以下 IP 地址” 将默认网关和子网掩码与 ipconfig 中的完全相同,对于 IP 地址,只需将最后 3 位更改为 1 到 255 之间的任何值

该 IP 将是您的新固定/静态 IP,并且在您下次插入电话时将保持不变。

【讨论】:

【参考方案7】:

我非常喜欢 John 的回答,但我想通过在 USB 连接的 Mobile 上运行客户端 TCP 和在本地 PC 上运行服务器来测试一些客户端//服务器配置的人的一些更改.

首先,很明显 10.0.2.2 无法运行,因为这是一款真正的硬件移动设备,而不是模拟器。

所以按照约翰的指示:

拔掉电脑上的所有网线并关闭wifi。 关闭安卓设备上的wifi 通过 USB 将安卓设备连接到电脑

在 android 菜单中打开“USB 网络共享”(USB 调制解调器/USB 蜂窝调制解调器/USB שימוש כמודם סלולרי)。 (在网络下->更多...->网络共享和便携式热点”)

此 USB 连接将为您的单个 PC 连接充当 DHCP 服务器,因此它将在其本地 USB 网络中为您的 PC 分配一个专用(动态)IP。现在您所要做的就是告诉客户端应用这个 IP 和端口。

获取您的 PC 的 IP(已由 USB 系绳电缆分配。) (打开命令提示符并输入“ipconfig”然后查找 USB 网络适配器分配的 IP,在 Linux 中为 ifconfig 或 Ubuntu 的“连接信息”等。)

告诉应用程序连接到该 IP(即 192.168.42.87),类似于(Java - 客户端):

String        serverIP      = "192.168.42.87";
int           serverPort    = 5544;
InetAddress   serverAddress = InetAddress.getByName(serverIP);
Socket        socket         = new Socket(serverAddress, serverPort);
...

享受..

【讨论】:

【参考方案8】:

Google 发布了针对此类问题的解决方案here。

步骤:

在启用 USB 调试的情况下连接您的 Android 设备和开发机器 在你的开发机器上打开Chrome,打开新标签页,在新的浏览器标签页中右击,点击inspect 点击右上角的三点图标,-> 更多工具,远程设备。 查看屏幕底部,确保您的设备名称以绿色圆点出现在列表中。 查看下方设置部分,勾选端口转发标记 添加规则。例如,如果你的 python web 服务器在你的机器 localhost:5000 上运行,并且你想从你的设备端口 3333 访问它,你在左侧输入3333,然后输入localhost:5000,然后点击添加规则。李> 瞧,现在您可以从您的设备访问您的网络服务器了。尝试打开新的浏览器标签,然后从您的设备访问http://localhost:3333

【讨论】:

按广告宣传。也可以保持设备和机器上的端口相同:)。 (不知道为什么要使用设备上的另一个端口) 这应该是公认的答案。如果您为本地开发人员使用自签名证书,请记住在新选项卡中添加 SSL 协议,例如 localhost:5000。效果很好。 “该面板已被弃用,取而代之的是具有同等功能的 chrome://inspect/#devices 界面。” 所以只需将 chrome://inspect/#devices 粘贴到 chrome 中,然后跳到答案的端口转发步骤。 我只花了一个多小时试图弄清楚如何让这些说明与设备上的 Chrome 返回的ERR_EMPTY_RESPONSE 一起工作......直到我终于意识到我没有运行我的我桌面上的本地主机服务器,实际上没有任何连接!嗬!启动服务器(在本例中为 Apache),一切都立即开始运行。重要的第一步是在设置端口转发之前确保您的目标服务器实际运行。 正确答案是端口转发。通常你会在你的防火墙中设置它——要么使用配置文本文件,要么使用诸如 Icefloor 之类的应用程序。但是对于不经常处理防火墙配置的人来说,这个过程可能会有点麻烦。因此,Chrome 开发工具提供了一种使用简单 GUI 进行设置的简单方法。几年前我在另一台机器上手动设置了端口转发,但我仍然懒得重新做一遍。【参考方案9】:

您好,您可以通过

访问您的 xampp localhost
    控制面板 --> windows 防御者防火墙 --> 高级设置(左侧)--> 入站规则--> 新规则--> 端口--> 在特定的本地端口中写入您的 Apache 端口--> 下一个--> 下一个 然后你可以使用本地 PC IP 地址访问你的本地主机:

【讨论】:

【参考方案10】:

如何在实际 Android 设备中轻松访问 LocalHost -> 通过 USB 将您的电脑与 android 设备连接

    转到 Chrome 检查单击“f12”或 Control+Shift+C

Chrome Inspection tool

    检查镀铬检查工具的底部。

    现在转到远程设备选项卡中的设置。

Remote Devices Tab

    检查“发现 USB 设备”选项以及“端口转发”选项。

    现在点击添加规则,输入任何设备端口,例如(4880)并在本地地址中输入本地主机的实际地址,例如(127.0.0.1:480)

    添加规则后,转到您的 android studio -> 在您的代码 URL (http://127.0.0.1:4880) 中。请记住将端口从 480 更改为 4880。

    转到 Chrome 中的远程设备选项卡,然后单击您连接的设备。添加新网址(127.0.0.1:4880) Inspect the Android Device Chrome Browser

检查您的实际设备 Chrome 浏览器并开始在实际 Android 设备上调试代码。

【讨论】:

【参考方案11】:
    确保您拥有adb installed on the computer、USB debugging enabled on the phone,并且手机已允许访问计算机。通过 USB 数据线将手机插入计算机,并确保它可见(它应该显示在 Bash 命令中adb devices在你电脑的Chrome浏览器中,打开chrome://inspect/#devices,点击“端口转发”按钮,勾选“启用端口转发”,在电脑上添加你想要的端口可通过电话 (detailed instructions here) 访问。您需要保持打开运行 chrome://inspect/#devices 的选项卡。 在手机浏览器中,导航到 localhost:[port_number],它应该会显示计算机上正在运行的任何内容。

这适用于 Windows 和 Ubuntu Linux,也应该适用于 Mac。

【讨论】:

【参考方案12】:

我遇到的问题也许对某人有帮助,我工作了很长时间,我的电脑和安卓设备连接到同一个 WiFi 网络,而安卓设备通过打开端口 8080 的电脑的 IPV4 地址连接到防火墙.

一天: 我安装了 Genymotion 模拟器,以便在不同的屏幕上调试 UI。 感谢 Genymotion/Virtualbox 网络配置,它毁了我的 WiFi 适配器。

解决方法是重新配置 WiFi 网络适配器上的 IPV4/TCP 设置:

【讨论】:

【参考方案13】:

Zsivics Sanel 的 answer above 可以很好地进行 USB 调试,但如果您想访问设备上的本地主机以进行 Wifi ADB,您可以使用命令 adb reverse tcp:port tcp:port 并在你的安卓设备上使用链接http://localhost:port/ 来访问你电脑的http://localhost:port/

这也适用于 USB 调试 :)

详细的答案和解释是here。

【讨论】:

以上是关于从 USB 连接的 Android 移动设备访问 PC 的本地主机的主要内容,如果未能解决你的问题,请参考以下文章

adb通过wifi连接android设备

Chrome OS 更新新版本可让Linux访问USB连接的Android设备

Ranorex连接Android

从通过 USB 连接的外部天线获取数据

无法发现 Android 设备

直接通过通过localhost访问网站的android设备打印