1. 程式人生 > >Android TCP真正有效的斷鏈檢測方法

Android TCP真正有效的斷鏈檢測方法

1. 利用socket提供的isConnected()與isClosed()方法來判斷。但這種方式只是本地判斷,只是本地操作connect()或close()方法後儲存的一個狀態,對於遠端伺服器主動斷開就沒有用了。

2. 利用socket中的sendUrgentData()來判斷。這種方法不管是客戶端主動斷開還是伺服器主動斷開,亦或者是異常斷開都是有用的。但這種方法有一個明顯的缺點,它得向伺服器傳送資料,相當於使用OutputStream,這就會影響正常通訊的速度,並且會影響另一端的執行。

3. 利用BufferedReader中的readLine()來判斷。當伺服器主動斷開時,readLine()方法會返回null。注意這種方式要求傳送的資訊中必須有換行符'\r\n'、'\r'或'\n'。如果伺服器傳送資訊中不含換行符的話,那就唯有等到socket關閉時才有機會讀到。

4. 利用InputStream.read()或BufferedReader.read()來判斷。當伺服器主動斷開時,read()會返回-1

2018-08-30實際驗證:在Socket.connect()成功後,設定全域性變數bConnect=true;並另開一個執行緒:迴圈呼叫InputStream.read()直到返回-1或異常時設定全域性變數bConnect=false;在網路傳送的執行緒中判斷全域性變數bConnect==true再呼叫OutputStream.write()。