1. 程式人生 > >Android SocketTimeoutException異常分析

Android SocketTimeoutException異常分析

環境說明

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端異常的過程:

  1. 對手機進行root處理
  2. 按照網上抓包流程提供的tcpdump抓包過程分析
  3. 將抓包資料使用wireshark進行分析
  4. 在wireshark過濾規則部分輸入對應規則進行過濾
  5. 分析tcp資料包通訊流程,檢視是未傳送成功還是服務端是否返回

參考資料