有沒有辦法讓SSLSocket等到握手完成而不使用addHandshakeListener()方法?我希望阻止它完成握手。更多的說明:最初使用常規(非SSL)套接字(這是必需的,因爲必須在實際握手發生之前將包發送到服務器)。使用SSlSocketFactory.createSocket將此套接字「轉換」爲SSLSocket。 我的問題是,是否有辦法現在同步做握手。直到握手完成時才阻止SSLSocket?
回答
SSLSocket.startHandshake()是一個同步調用,當你的同齡人之間開始握手是第一次,它會阻止調用線程,直到握手已經完成:
... ...
// initial handshake between peers, don't need Listener:
sslSocket.startHandshake(); // <- this will block the calling thread.
// handshake is completed at this point
... ...
這不是在Android API完全記錄,請參閱原始Java API以獲得完整的javadoc:
在此連接上啓動SSL握手。常見原因包括需要使用新的加密密鑰,更改密碼套件或啓動新會話。要強制完成重新認證,在開始握手之前,當前會話可能失效。
如果數據已經在連接上發送,它將在此握手期間繼續流動。當握手完成時,這將通過事件發出信號。 此方法對於連接的初始握手是同步的,並在協商握手完成時返回。某些協議可能不支持現有套接字上的多個握手,並可能拋出IOException。
的情況,如果你操縱的同行之間的握手多次變得相當複雜,它可能是在某些情況下,異步調用(當你需要監聽器),看看這個在線文檔Fundamental Networking in Java瞭解更多詳情。
@UkuLoskit,我從來沒有用過startHandshake( )在Android項目中的API,但是,根據javadoc,只要是第一次握手,startHandshake()就是同步參與的。請注意,Android開始自UI Level 11開始限制UI線程上的網絡操作,因此在您的Android應用中使用此網絡API時要小心,並確保您的代碼在不同的API級別上工作。 – yorkw
@UkuLoskit,你甚至不需要使用'startHandshake()',只需從SSLSocket的I/O流開始讀/寫,就會啓動握手,並且在它成功完成之前不會發生。 – Bruno
好吧,我的壞。我閱讀了文檔,但是我的應用程序運行的方式導致我錯誤地認爲它沒有被阻止。我會在兩個小時內獎賞你的獎金(由於限制,現在不能這樣做)。 –
- 1. 註冊接收握手的SSLSocket完成
- 2. 直到第一個動作完成時才阻止輸入?
- 3. Java SSLSocket握手失敗
- 4. 握手後SSLSocket getOutputStream()塊
- 5. iOS直到動畫完成後才阻止旋轉
- 6. 直到咕嚕完成後才阻止提供文件
- 7. 阻止接口,直到完成操作
- 8. 如何在握手之前寫入SSLSocket?
- 9. 如何完成WebSocket握手?
- 10. 將rc.local阻止,直到命令完成執行?
- 11. 阻止代碼運行,直到ajax完成
- 12. 可以nodejs阻止,直到完成任何事情?
- 13. 阻止已觸發的Jenkins作業,直到* Jenkins完成*
- 14. 阻止js執行,直到異步請求完成
- 15. 阻止JavaScript執行,直到響應完成
- 16. 阻止ForEach直到異步事件完成
- 17. 阻止EDT直到executorservice完成所有任務
- 18. 阻止Android活動退出,直到清理完成
- 19. 做的ExecutorService和CountDownLatch阻止主線程,直到他們完成?
- 20. 阻止下一次keydown事件,直到腳本執行完成
- 21. 可以阻止iOS AudioServicesPlaySystemSound直到完成播放聲音?
- 22. 爲什麼活動阻止直到服務完成在Android?
- 23. 阻止jenkins任務,直到所有下游任務完成?
- 24. 阻止提交,直到一些Ajax動作完成
- 25. 如何阻止Jquery運行多次直到腳本完成
- 26. 後續REST調用被阻止,直到前一個完成
- 27. Android阻止服務被綁定,直到異步操作完成
- 28. 阻止主要活動,直到其他完成
- 29. Nacl_IO阻塞線程,直到fopen完成
- 30. FFmpeg阻塞管道,直到完成?
也許這會幫助你:http://stackoverflow.com/questions/3246792/how-to-enable-logging-for-apache-commons-httpclient-on-android – pawelzieba