我對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