这让我有点发疯。我在 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 connex 并尝试创建一个套接字来与我的服务器通信时,我遇到了这种行为。套接字创建工作正常,我已经阅读了原因。我还阅读了确定套接字连接是否可以工作的唯一方法是用它读/写数据。这对我来说不是一个选择,我想知道我是否可以依靠 getOutputStream() 在一分钟内不返回来表示存在连接问题。
想法?评论?