如何在USB连接下发起从Android到PC的HTTP请求?

11

可以实现,但有几个不理想的原因。这样做会很麻烦,因为用户需要下载和配置额外的应用程序。 - Tom Wright
检查一下这个链接是否对你有帮助:http://superuser.com/questions/425967/how-to-run-an-apache-tomcat-webserver-on-my-pc-and-access-it-from-a-real-android。如果需要更多帮助,请留言。 - Gaurav Agarwal
@blackcrow 谢谢,但是正如我所说,我不能依赖互联网连接。需要通过USB连接。 - Tom Wright
为什么一定要使用HTTP?如果是这样,为什么不通过网络呢?看起来你的应用程序使用案例一定非常独特? - Abe Petrillo
@AbePetrillo 我想它在幕后并不一定是HTTP。但不能使用网络(WiFi或蜂窝数据)因为没有可用的网络。我猜这很独特。 - Tom Wright
显示剩余2条评论
5个回答

11
如果 Android 手机支持 USB 共享网络连接:

  1. 通过 USB 线连接手机
  2. 启用 USB 共享网络连接
  3. 将创建一个 IP 范围为 192.168.142.X 的本地局域网连接[此 LAN 的 IP 也可以静态设置]

现在,PC 上运行的 Web 服务器就可以使用此设置接收 HTTP 请求。


8
事实上,单向通信的不是通信本身,而是建立连接的能力。
要使用标准 Android 功能实现这一点,您将从概念上对设备发起的连接进行隧道处理,通过现有的 PC 发起的连接。例如,使用现成的工具:
  1. 从 PC 向设备设置 ADB 端口转发
  2. 在 Android 设备上的非特权端口上运行 SSH 服务器,该端口号与 adb 转发相对应
  3. 通过 ADB 转发从 PC 上的 SSH 客户端连接到手机,并在手机上设置一个端口的 SSH 转发,将其返回到 PC 上的一个端口
  4. 在 PC 上运行监听 SSH 转发目标端口的服务器。
  5. 使用手机上的代码通过该 SSH 端口转发与 PC 上的服务器联系
您实际上不必使用 SSH,只是因为它可以打包好准备使用的部件。
作为替代想法,一些支持通过 USB 共享移动网络服务提供给 PC 的 Android 设备会隐含地创建双向 IP 网络,您可以将其用于其他目的。但请务必小心,不要意外地通过电话路由所有 PC 的网络流量。

@Tom Wright - 除非你自己创建/重新打包这些组件,否则更多的是关于设置现有工具而不是编码。 - Chris Stratton
好的,赏金已经颁发了。我会在接下来的几天里尝试一下,如果它有效的话就标记为已接受。 - Tom Wright

1
在USB中,始终是主机(在您的情况下为PC)发起通信。因此,您需要使用一些技巧来使Android设备发送请求。PC可能会定期轮询Android(例如,每100毫秒)是否有待处理的HTTP请求,并相应地收集它,类似于jackbot所做的操作。我想这就是Android到USB端口转发所做的事情。

1
这让我觉得不太优雅,但至少我们知道它会起作用吧。 - Tom Wright
1
这里似乎存在两个非常不同的层之间的一些混淆。就低级别的USB而言(在安全手机上实际上无法更改),轮询已经作为USB堆栈的一部分进行了。就从PC到设备的转发TCP连接而言,不需要轮询,因为一旦建立连接,它就是双向的。您可以使用该双向连接请求PC建立另一个连接,或者(更有可能)可以通过它隧道传输其他内容。 - Chris Stratton

0

可以使用USB网络共享来实现此目的。当您在Android设备上启动PC的USB网络共享时,PC和Android设备将成为同一本地网络。这允许通过HTTP访问PC(例如测试HTTP服务器)。


-1

很遗憾,您无法通过本地套接字(例如/dev/tty...或类似物)发送HTTP请求。默认情况下,如果Android设备获取IP地址,则是通过DHCP或您设置的静态IP完成的。您需要做的是知道桌面计算机的IP地址。

您实际上想要实现什么?让应用程序发送请求到localhost,然后中继到PC吗?

此答案可能有所帮助 "查找通过USB网络共享的桌面IP地址"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接