これは私を少しナッツにしています。Androidデバイスで次を実行しています:
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();
無期限にブロックします。
これは素晴らしいです!!!! タイムアウトを確立できます。タイムアウトを超えた場合は、通信に問題があると想定できます。
Socket.getOutputStream() がブロックされるはずであるという確認が見つからないことを除いて。
Oracle の javadoc にも、Google の Android javadoc にもありません。
これはJVMに依存するものですか?Android の dalvik jvm を使用して動作に遭遇しました。
誰もこのようなことを経験しましたか?
マーク
コメントを追加するための編集:
「必要に応じてSSLSocket.getOutputStream()がSSLハンドシェイクを開始する」ことに興味があります
「必要に応じて」の定義は?この動作 (SSL ハンドシェイクの開始) は、JVM 仕様で必要なものですか? IOW は JVM 間で保証されていますか?
wifi接続をオフにして、サーバーと通信するためのソケットを作成しようとしたときに、この動作に遭遇しました。ソケットの作成は正常に機能し、その理由について読みました。また、ソケット接続が機能するかどうかを判断する唯一の方法は、それを使用してデータを読み書きすることです。これは私にとって選択肢ではなく、接続の問題があることを示すものとして、getOutputStream() が 1 分以内に返されないことに頼ることができるかどうか疑問に思っています。
考え?コメント?