這讓我變得有點瘋狂。如果無線連接被關斷的線無線連接禁用時,Socket.getOutputStream()阻塞
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) sc.getSocketFactory();
Socket s = (SSLSocket) sslsocketfactory.createSocket(someHost, somePort);
OutputStream o = s.getOutputStream();
我觀察::
OutputStream o = s.getOutputStream();
塊無限期我有以下Android設備上運行。
這是真棒!我可以建立一個超時,如果超過,我可以認爲有一些通信問題。
除了我找不到任何確認Socket.getOutputStream()應該阻止。
不在Oracle的javadoc中,也不在Google的Android javadoc中。
這是一個JVM依賴類的東西?我使用Android的dalvik jvm瀏覽了該行爲。
有沒有人遇到類似這樣的事情?
馬克
編輯評論作者:
我一直陪在好奇 「SSLSocket.getOutputStream()發起SSL握手如果neceessary」
什麼定義 「如果必要的話」?這種行爲(啓動SSL握手)是JVM規範所要求的嗎? IOW是否可以跨JVM保證?
我跑過這種行爲時,我關閉了我的無線連接,並試圖創建一個套接字與我的服務器通信。套接字的創建工作正常,我讀了關於爲什麼。我也讀過唯一確定套接字連接器是否工作的方法,就是用它讀取/寫入數據。這對我來說不是一種選擇,我想知道如果我可以依靠getOutputStream()在一分鐘內不返回,表示存在連接問題。
想法?註釋?
我認爲它會在某個時刻拋出一個超時異常的形式? – njzk2
njzk2 - 不,它不會拋出任何異常。這很容易處理。它只是掛在那裏。 – user1126515
我的理解是,它應該拋出一個時間錯覺,可以在socket對象中進行配置。 – njzk2