Android 通过 WiFi 路由下行数据,通过移动网络路由上行数据
Android route downlink data via WiFi and uplink data via mobile network
是否可以在 android 中通过 WiFi 路由所有传入数据流量,并通过移动网络路由所有传出流量。
在 Whosebug 上找到答案
How Wifi and Mobile Data both work simultaneously in android for OBD2 device。但它确实只为一台主机路由数据。
还有一个应用程序SuperDownload使用wifi和移动网络来实现更快的下载速度。我正在尝试做这样的事情。
在android WiFi 和移动网络不能同时工作。是否可以通过生根设备使其工作? (SuperDownload 需要 root)。
我觉得根本不可能。想一想,你的目的地如何找到传递的答案路径?
让我说得更清楚一点,当您尝试从网络(例如网页)获取某些内容时,您应该将您的 IP 地址和目标 IP 地址放在一个数据包中,然后将其发送到网络(wifi)或 3g),网络会将其路由至您的目的地。当您的响应准备就绪时,目的地会反转该过程并将您的 IP 地址作为目的地地址并将其 IP 地址作为源地址并将其释放到网络中。同样,使用此信息的网络将找到您并将数据包发送给您。
因此,您永远无法将信息发送到网络(例如 wifi)并从另一个网络(例如 3g)接收答案。
注意:如果所有中间路径路由器都知道您的目标(向两个不同的网络发送和从两个不同的网络接收),就可以实现。目前,在政府通常使用的一些特别是边缘路由器中的路由协议中,像您的目标一样的东西正在努力让他们克服传输介质的有限速度,例如。光纤(超过 10/100 gbps)。
你要做的事情并不容易。
首先您必须同时使用两个网络接口,这是可能的,但这是一种 hack,因为 Android 不支持它。为此,您必须打开
connectivityManager.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "feature");
功能名称与您的硬件有关,应该是enableHIPRI。问题是在你打开界面后一段时间后它会关闭,因此你必须每 20-30 秒执行一次 http 请求以保持它。这样界面就会一直亮着。
到路由,你应该添加静态路由
connectivityManager.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_HIPRI, ipAddressInt);
其中 ipAddressInt
是您要在 3G 上连接的地址。一般情况下路由是通过WiFi发送的,所以你的GET(WiFi下载)没有问题,但是你应该添加一个上传路由。
现在有2个问题,
- 首先是这种方式在3G上DNS解析没有了,可以在IP上工作但是必须有静态IP的服务器,
- 其次,我不确定它是否适用于特定端口(这是我目前唯一的想法...)。
当然你应该实现另一个保持接口活动的线程。
是否可以在 android 中通过 WiFi 路由所有传入数据流量,并通过移动网络路由所有传出流量。
在 Whosebug 上找到答案 How Wifi and Mobile Data both work simultaneously in android for OBD2 device。但它确实只为一台主机路由数据。
还有一个应用程序SuperDownload使用wifi和移动网络来实现更快的下载速度。我正在尝试做这样的事情。
在android WiFi 和移动网络不能同时工作。是否可以通过生根设备使其工作? (SuperDownload 需要 root)。
我觉得根本不可能。想一想,你的目的地如何找到传递的答案路径?
让我说得更清楚一点,当您尝试从网络(例如网页)获取某些内容时,您应该将您的 IP 地址和目标 IP 地址放在一个数据包中,然后将其发送到网络(wifi)或 3g),网络会将其路由至您的目的地。当您的响应准备就绪时,目的地会反转该过程并将您的 IP 地址作为目的地地址并将其 IP 地址作为源地址并将其释放到网络中。同样,使用此信息的网络将找到您并将数据包发送给您。 因此,您永远无法将信息发送到网络(例如 wifi)并从另一个网络(例如 3g)接收答案。
注意:如果所有中间路径路由器都知道您的目标(向两个不同的网络发送和从两个不同的网络接收),就可以实现。目前,在政府通常使用的一些特别是边缘路由器中的路由协议中,像您的目标一样的东西正在努力让他们克服传输介质的有限速度,例如。光纤(超过 10/100 gbps)。
你要做的事情并不容易。
首先您必须同时使用两个网络接口,这是可能的,但这是一种 hack,因为 Android 不支持它。为此,您必须打开
connectivityManager.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "feature");
功能名称与您的硬件有关,应该是enableHIPRI。问题是在你打开界面后一段时间后它会关闭,因此你必须每 20-30 秒执行一次 http 请求以保持它。这样界面就会一直亮着。
到路由,你应该添加静态路由
connectivityManager.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_HIPRI, ipAddressInt);
其中 ipAddressInt
是您要在 3G 上连接的地址。一般情况下路由是通过WiFi发送的,所以你的GET(WiFi下载)没有问题,但是你应该添加一个上传路由。
现在有2个问题,
- 首先是这种方式在3G上DNS解析没有了,可以在IP上工作但是必须有静态IP的服务器,
- 其次,我不确定它是否适用于特定端口(这是我目前唯一的想法...)。
当然你应该实现另一个保持接口活动的线程。