2012-11-01 56 views
6

在我的Android代碼(使用Apache HTTP客戶端)我已經設置以下參數:差異與消息「連接超時」

HttpConnectionParams.setConnectionTimeout(params, 30 * SECOND_IN_MILLIS); 
HttpConnectionParams.setSoTimeout(params, 30 * SECOND_IN_MILLIS); 

我連接到HTTPS Web服務。在慢速網絡上,預計30秒後我得到ConnectionTimeoutException(然後我重試);但也有「少數」的情況下(沒有模式,我可以看到),我得到以下任一:

javax.net.ssl.SSLException: Read error: ssl=0xe71160: I/O error during system call, Connection timed out javax.net.ssl.SSLException: Write error: ssl=0xe71160: I/O error during system call, Broken pipe

我得到了所以這段代碼,目前尚在測試:

registry.register(new Scheme("https", 
    SSLCertificateSocketFactory.getHttpSocketFactory(30 * SECOND_IN_MILLIS, null), 443)); 

我可以理解連接建立超時和套接字超時 - 我的查詢是否真的需要第三次SSL超時?與SO_TIMEOUT有什麼不同?

PS:這些excepions似乎在讀取/寫入數據時會出現畫面 - 這應該導致數據丟失 - 但我無法觀察到這一點。

回答

2

不同之處在於ConnectionTimeoutException發生在完全不能建立連接的情況下。這意味着服務器根本無法訪問。

SSLException發生在連接已建立但在SSL握手期間連接超時。由於在SSL握手開始之後發生超時,所以SSLException作爲更高級別的異常拋出。

您可以嘗試檢查是否輸入ConnectionTimeoutException作爲SSLException的原因。

相關問題