0

问题: 默认情况下,Android 只有一个活动网络,因此当您通过 Wi-Fi(物联网、行车记录仪等,显然没有互联网)将您的其他设备连接到手机时,您的 Android Cellular 无法用于该应用程序。如果您切换到蜂窝网络(例如ConnectivityManager.bindProcessToNetwork),则 Wifi 不再可用于http://10.XX.XX.XX对设备的任何请求。

增加更多复杂性:从技术上讲,您可以 ping 第二个网络,但仅对Network.openConnection(...)WiFi 网络执行操作是不够的,因为我在低级别运行 FFMPEG,需要不断访问 WiFi 设备,无法控制它何时发生以及如何发生,这是一个低层次的过程。

我真正需要的是稳定地重新路由从 HTTP://10.XX.XX.XX 到 WIFI DEVICE 的所有流量。我问的很多吗?任务在纸上似乎微不足道,所以一旦到这个特定 IP 的所有流量都重新路由到 WiFi,我就可以将其他所有内容发送到蜂窝网络。

到目前为止我做了什么:

  • 默认将所有流量绑定到蜂窝网络
  • 创建了 VPNService 以捕获到 10.XX.XX.XX 端口的所有流量,VPNService.Builder().addAddress(...).establish()因此我开始ParcelFileDescriptor使用。我现在如何将所有这些捕获的流量发送到 WiFi 网络,并将整个流量返回给客户端?任何建议为此 IP 地址创建 TCP 套接字或Network.getSocketFactory().createSocket(...)用于将特定套接字绑定到 WiFi 的人的特别说明:我需要它稳定且有效。已弃用requestRouteToHost不再起作用,请不要建议那些旧的和过时的东西,我花了很多时间来测试它。我不需要关闭我的连接并一遍又一遍地打开它,我不需要连续工作 4 秒然后掉线,然后重新运行它。我正在寻找解决方案,即:
  • 稳定的
  • 在应用程序的整个会话中活着
  • 只需将数据从 VpnService 流到 Wifi 并将其发送回请求者
  • 或者,也许您知道另一种简单而现代的方式来使用最新的 Android SDK 并以简洁而优雅的方式执行它。非常感谢你们中的任何人花时间阅读那篇文章。
4

0 回答 0