我对 Android 中的网络连接过程有一点疑问。
我的场景是这样的, 我正在使用 3G 通过 TCP 连接到远程服务器。连接后,我启用了 Wi-Fi。 Android 已切换到 WiFi。而且,与服务器的连接仍然有效,这意味着没有连接断开。
在这里,我想知道一件事。 当 N/W 从 3G 切换到 Wi-Fi 时,Android(或任何其他)设备是否也会更改其 IP 地址? 如果它更改了 IP,旧连接是否有效? (意味着,在新的 IP 上,应该再次有新的连接。)
提前致谢。
最佳答案
我的理解是IP地址会变。当手机打开 WiFi 时,您的路由器会为设备分配 IP 地址。我怀疑 Android 可能会重新启动 IP 堆栈(虽然只是一个猜想),我不记得看到过任何一种“切换”机制来让设备拥有相同的 IP 地址。虽然这在理论上可能是可行的,但我不确定它会使事情变得多复杂:) 此外,Android 只有一个网络接口(interface)卡,因此它不可能同时保留两个 IP 地址。如果它切换到 WiFi,它只保留 Wifi IP 地址。
我确实从我的经验中观察到,像这样的场景会失败:
- Android 最初通过 3G 连接
- Android 应用程序向 Web 服务器发送 HTTP GET
- Android 感知到更好的 WiFi 连接并从 3G 切换
在这种情况下,GET 请求失败。
可能的解决方案:
- 尝试多次:使用 try-catch-repeat 3 次(或不同的魔数(Magic Number),但在大多数情况下 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; } }
分块传输(这样即使您失去连接,您仍然可以完成传输)。
希望这对您有所帮助。
关于android - 通过 Android 中的 Wi-Fi 和 3G 持续连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2917943/