我有Android上的tcp套接字客戶端。另外,我在nodejs上有tcp套接字服務器,它每2秒發送一次連接的客戶端測試消息。當我啓動應用程序時,它從服務器接收測試消息。但是,當我關閉Wi-Fi連接,我的客戶端套接字關閉並拋出SocketException(etimedout),如果我打開Wi-Fi我無法接收服務器消息。但服務器消息已在服務器中排隊,並等待發送給客戶端。Android的tcp套接字設置etimedout值
據我所知,如果tcp客戶端丟失連接,它應該嘗試修復連接並接收服務器消息。但在我的情況下,客戶端無法接收消息,因爲套接字關閉。在我的電腦上使用Windows和Linux套接字客戶端時,我做的是同樣的事情,但是當我關閉wi-fi時,客戶端套接字未關閉,並且當我切換wi-fi時,我收到了消息當wi-fi禁用時發送。
問題:爲什麼在android中,套接字很快關閉?我可以爲套接字客戶端設置任何超時關閉嗎?
我想:
setKeepAlive(true); setSoTimeout(10000);
儘量選用SocketFactory.getDefault().createSocket();
無影響。
這可能是因爲當你關閉wifi時,Android實際上正在移除該網絡接口。比較關閉Android設備上的WiFi與拔掉它所連接的接入點之間的區別可能很有趣。 – 2014-11-04 17:04:01
我試圖拔掉接入點。同樣的結果。 – Vusal 2014-11-14 21:16:11