我对Android中的网络连接过程有一个疑问。Android中通过Wi-Fi和3G进行持续连接
我的场景就像是, 我使用3G通过TCP连接到远程服务器。连接后,我启用了Wi-Fi。 Android已切换到WiFi。而且,服务器仍然保持连接,意味着没有连接丢失。
在这里,我想知道一件事。 当N/W从3G切换到Wi-Fi时,Android(或任何其他)设备是否也会更改其IP地址? 如果它改变了它的IP,这个旧连接是否有效? (意味着,在新的IP上,应该有新的连接。)
在此先感谢。
我对Android中的网络连接过程有一个疑问。Android中通过Wi-Fi和3G进行持续连接
我的场景就像是, 我使用3G通过TCP连接到远程服务器。连接后,我启用了Wi-Fi。 Android已切换到WiFi。而且,服务器仍然保持连接,意味着没有连接丢失。
在这里,我想知道一件事。 当N/W从3G切换到Wi-Fi时,Android(或任何其他)设备是否也会更改其IP地址? 如果它改变了它的IP,这个旧连接是否有效? (意味着,在新的IP上,应该有新的连接。)
在此先感谢。
我明白的是IP地址会改变。当手机切换到WiFi时,您的路由器会为设备分配IP地址。我怀疑Android可能正在重新启动IP堆栈(只是一个猜想),我不记得任何一种“切换”机制让设备拥有相同的IP地址。虽然这可能在理论上是可能的,但我不确定它可以使事情变得复杂:)另外,Android只有一个网络接口卡,所以它不可能同时保留这两个IP地址。如果它切换到WiFi,它只保留Wifi IP地址。
我也从我的经验观察,这样的场景将失败:
在这种情况下,GET请求失败。
可能的解决方案:
这样使用代码来检查网络连接,并从那里继续:
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;
}
}
组块的转移(即使你失去了你的连接这种方式,你仍然可以完成传输)。
希望这会有所帮助。
嗨传奇,谢谢你的回答。你说得对,IP地址会改变。所以,Client正在开始新的会话。 我的问题是2个会话,远程服务器无法关闭旧会话,因为它没有得到PIN Act。无论如何,这是不同的问题。 非常感谢您的好解释。 – Andhravaala 2010-06-09 04:40:10
你如何知道连接没有像你说的那样“放下”? HTTP例如是无状态的,每个连接都可以独立于前一个。 – 2010-05-27 01:54:52
对不起,延迟回复。我在循环中有一个“read()”,每3秒会解锁一次。如果连接断开,“read()”将返回'-1'。但是我的代码没有返回'-1',并且仍然能够每隔3秒阻止和解除“read()”。 – Andhravaala 2010-05-27 02:14:35