WIFI Direct 和 3G 数据会话可以同时工作吗?
Posted
技术标签:
【中文标题】WIFI Direct 和 3G 数据会话可以同时工作吗?【英文标题】:Can WIFI Direct and 3G Data Session Concurrently Work? 【发布时间】:2012-04-07 10:23:27 【问题描述】:3G Data Session 和 WIFI Direct 可以同时工作吗?如果是这样,那么两个IP地址存在,会不会造成混淆?一个例子:
A 使用 3G 下载视频文件,现在进度是 50%。现在A选择一张图片,想用WIFIDirect分享给B,这样可以不中断视频文件下载成功吗??说WIFI连接正常,那么A有2个IP地址,在图片分享中,使用哪个IP地址?
【问题讨论】:
【参考方案1】:我在我的 Galaxy Nexus 上运行我自己的 WiFi Direct 应用程序,而我的 3G 处于开启状态,到目前为止我没有遇到任何问题。这肯定是因为 WiFi Direct 应用程序使用的是 android.net.wifi.p2p 包。当您通过 3G 获取 IP 时,将使用 android.net.wifi 包。因此,您的设备可以有两个不同的 IP 地址。并且对于图片共享,将使用本地IP。
【讨论】:
【参考方案2】:我认为两个同时连接是不可能的,因为当您打开 WiFi 时,它会自动关闭 3g 并使用 WiFi 作为默认连接。反之亦然。
至少这是我在所有安卓手机上都注意到的行为。
【讨论】:
我还没有使用 Wifi-Direct 的经验,但合乎逻辑的想法是 wifi direct 的路由表与使用 WLAN 完全不同。认为你可以同时准备好两个连接,而你没有连接到 WLAN,所以当你连接它时,3G 被禁用,因为 WIFI 是最优先的接口。然而 wifi direct 不是为了连接到网络,而是为了连接两个不同的设备并分享想法。那应该只在路由表中创建一个条目,以通过 WIFI-DIRECT 仅将数据包发送到该 IP 地址,以便网络连接可用【参考方案3】:3G Data Session 和 WIFI Direct 可以同时工作吗? 是的...可以工作
这是否会在不中断视频文件下载的情况下成功? 是的..
在图片分享中,会使用哪个IP地址? 我猜是本地IP。还没查过
【讨论】:
图片分享应用,在使用socket的时候,2个IP地址是可用的,并且说它没有明确绑定任何IP地址,那么使用哪个IP地址就混淆了!!【参考方案4】:虽然Android手机不允许同时使用两个接口,但是可以通过应用开发来实现。我为 Windows 开发了一个下载加速器,它同时使用 WIFI 和以太网接口进行 TCP 连接。
这两个接口只能用于 TCP 连接,具有两个不同的 IP 地址。您可以为 Android 手机开发一个应用程序,该应用程序将首先确定文件的大小(以字节为单位)并在每个接口上发送字节请求。请记住,UDP 连接在并发接口中是不可能的。
【讨论】:
一些编码示例是合适的。【参考方案5】:您可以使用 requestRouteToHost API 进行路由,即如果您知道存储视频的主机地址,视频下载可以如下进行:
ConnectivityManager connManager = null;
if(mContext != null)
connManager = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfos = connManager.getAllNetworkInfo();
for(int loop_index=0;loop_index<netInfos.length;loop_index++)
switch(netInfos[loop_index].getType())
case ConnectivityManager.TYPE_MOBILE_HIPRI:
if(netInfos[loop_index].getState()== NetworkInfo.State.CONNECTED)
connectionSet = connManager.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_HIPRI, lookupHost("Video Stored Address"));
break;
case ConnectivityManager.TYPE_WIFI:
if(netInfos[loop_index].getState()== NetworkInfo.State.CONNECTED)
break;
default:
if(netInfos[loop_index].getState()== NetworkInfo.State.CONNECTED)
break;
private static int lookupHost(String hostname)
InetAddress inetAddress;
try
inetAddress = InetAddress.getByName(hostname);
catch (UnknownHostException e)
return -1;
byte[] addrBytes;
int addr;
addrBytes = inetAddress.getAddress();
addr = ((addrBytes[3] & 0xff) << 24)
| ((addrBytes[2] & 0xff) << 16)
| ((addrBytes[1] & 0xff) << 8)
| (addrBytes[0] & 0xff);
return addr;
【讨论】:
以上是关于WIFI Direct 和 3G 数据会话可以同时工作吗?的主要内容,如果未能解决你的问题,请参考以下文章