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 数据会话可以同时工作吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android 同时运行 Wifi Lan 和 Wifi Direct

wifi和3G能在安卓上同时工作吗?

如何以编程方式同时使用 WiFi 和 3G 网络 [关闭]

检查手机是不是使用 WIFI 或 Data/3G

Wifi Direct 科尔多瓦

我可以通过 WIFI-Direct 在 Android 和 IOS 之间连接吗?