我们需要将云服务器上的端口隧道连接到 Android 设备。现在,我们在 Android (Jsch) 上使用 SSH 客户端来启动反向端口转发。这可行,但我们不需要/不想要加密/身份验证的开销。
本质上,可以建立从客户端 (Android) 到云中服务器的简单 IP 隧道。
谷歌搜索这个主题并不乐观,所以我想我会在这里尝试一下,看看我是否能找到任何线索。显然,我们宁愿不要自己从头开始构建它。
这实际上在 Java 中实现起来相当简单。设备上的隧道应用程序打开两个连接,一个连接到服务器,一个连接到设备上的服务。现在,如果您使用 Input-/OutputStreams(与 nio 通道一样),您需要 2 个线程,每个线程都读取一个 InputStreams,并将它们收到的所有内容写入相反的输出流。在服务器上,您将需要一个类似的过程,从 ServerSocket.accept 获取两个连接,并且需要能够找出哪个是隧道程序,哪个是服务的客户端(即测试隧道协议的标头)传入连接)。
如果您希望能够同时建立多个连接,这会变得有点复杂。如果您想避免打开多个隧道连接,则需要实现某种协议才能将隧道数据包分派到设备上的多个连接。