0
我寫了一個簡單的網絡引擎用於客戶端 - 服務器通信。它在Windows上完美工作,服務器知道客戶端何時斷開連接等。(readLine()拋出異常)。我嘗試將引擎移植到Android,併發送和接收數據,但由於某些原因,服務器無法檢測到套接字何時關閉(readLine()仍然被阻塞並且不會引發任何異常)。我甚至試圖從互聯網上斷開Android設備,但它仍然沒有檢測到關閉的套接字。我想通過實現超時來解決問題,當客戶端很長一段時間沒有發送消息時,服務器會認爲他已經斷開連接,但這可能不是一個好的永久解決方案。在Android上未檢測到套接字被關閉?
代碼是通過的try-catch異常包圍:
String userInput;
BufferedReader stdIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while ((userInput = stdIn.readLine()) != null) {
//do something
}
套接字是否按順序關閉或由對等關閉? – alk
@alk不確定你的意思,但服務器需要知道客戶端何時斷開,即使客戶端沒有強制通過socket.close()關閉套接字,例如,當應用程序被強制終止時,它可以'調用socket.close()。 – Ladas125
有100多個關於stackoverflow的問題,都詢問你所要求的一樣。其中之一是[爲什麼它不可能,沒有嘗試I/O,檢測到TCP套接字已被對方優雅地關閉?](http://stackoverflow.com/questions/155243/why-is-it-im-s-impossible-without -attempting-IO到檢測 - 即-TCP-插座是-GRAC) –