Android SocketTimeoutException異常分析
阿新 • • 發佈:2019-01-06
環境說明
Eclipse
Android4.0
tcp client客戶端程式
問題描述
在進行Android socket tcp通訊開發的過程中碰到了下述異常,具體logcat錯誤如下:
10-29 03:16:16.710: I/recv timeout(7476): java.net.SocketTimeoutException 10-29 03:16:16.710: I/recv timeout(7476): at java.net.PlainSocketImpl.read(PlainSocketImpl.java:491) 10-29 03:16:16.710: I/recv timeout(7476): at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46) 10-29 03:16:16.710: I/recv timeout(7476): at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240) 10-29 03:16:16.710: I/recv timeout(7476): at java.io.DataInputStream.read(DataInputStream.java:63) 10-29 03:16:16.710: I/recv timeout(7476): at java.io.InputStream.read(InputStream.java:162) 10-29 03:16:16.710: I/recv timeout(7476): at java.io.DataInputStream.read(DataInputStream.java:59)
兩個懷疑出現該異常的可能情況
- 自己寫的socket程式存在問題,如接收超時時間太短等情況可能發生
- 服務端程式可能出現了異常不進行回覆
分析過程
反覆檢查自己的client程式發現client端並沒有任何異常設定程式碼,那麼如何證明不是client端的問題而是server端出現了異常呢?
簡單說下自己抓包分析得出server端異常的過程:
- 對手機進行root處理
- 按照網上抓包流程提供的tcpdump抓包過程分析
- 將抓包資料使用wireshark進行分析
- 在wireshark過濾規則部分輸入對應規則進行過濾
- 分析tcp資料包通訊流程,檢視是未傳送成功還是服務端是否返回