Android中通过Wi-Fi和3G实现持续连接

时间:2010-05-27 01:29:37

标签: android networking

我对Android中的网络连接程序有一点疑问。

我的情景是这样的, 我使用3G通过TCP连接到远程服务器。连接后,我启用了Wi-Fi。 Android已切换到WiFi。并且,仍然与服务器连接,意味着没有连接丢弃。

在这里,我想知道一件事。 当N / W从3G切换到Wi-Fi时,Android(或任何其他)设备是否也会更改其IP地址? 如果它改变了它的IP,旧连接是否有效? (意思是,在新IP上,应该再次建立新连接。)

提前致谢。

1 个答案:

答案 0 :(得分:2)

我理解的方式是IP地址会改变。当手机打开WiFi时,路由器会为设备分配IP地址。我怀疑Android可能正在重新启动IP堆栈(虽然只是一个猜想),我不记得看到任何类型的“切换”机制让设备拥有相同的IP地址。虽然它在理论上可能是可能的,但我不确定它能做多么复杂:)此外,Android只有一个网络接口卡,所以它不可能保留两个IP地址。如果它切换到WiFi,它只保留Wifi IP地址。

我从我的经验中观察到,这样的情景会失败:

  • Android最初通过3G连接
  • Android应用程序将HTTP GET发送到Web服务器
  • Android感知更好的WiFi连接并从3G切换

在这种情况下,GET请求失败。

可能的解决方案:

  • 尝试多次:使用try-catch-repeat 3次(或不同的幻数,但在大多数情况下为我工作3次)应解决大多数问题。
  • 使用此类代码检查网络连接并从那里继续:

    if(!isOnline()) {
      Log.e("OFFLINEERROR", "No Network Connectivity");
    }
    
    public boolean isOnline() {
      try {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo().isConnectedOrConnecting();         
      } catch(Exception e) {
        //Returned a null so no Internet connection!
        return false;
      }
    }
    
  • 大块转移(这样即使你失去联系,你仍然可以完成转移)。

希望这有帮助。