【问题标题】:Can WIFI Direct and 3G Data Session Concurrently Work?WIFI Direct 和 3G 数据会话可以同时工作吗?
【发布时间】:2012-04-07 10:23:27
【问题描述】:

3G Data Session 和 WIFI Direct 可以同时工作吗?如果是这样,那么两个IP地址存在,会不会造成混淆?一个例子:

A 使用 3G 下载视频文件,现在进度是 50%。现在A选择一张图片,想用WIFIDirect分享给B,这样可以不中断视频文件下载成功吗??说WIFI连接正常,那么A有2个IP地址,在图片分享中,使用哪个IP地址?

【问题讨论】:

    标签: android wifi android-wifi wifimanager wifi-direct


    【解决方案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;
      }
      

      【讨论】:

        猜你喜欢
        • 2012-05-01
        • 2020-05-29
        • 1970-01-01
        • 1970-01-01
        • 2011-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多