【发布时间】:2014-12-06 20:59:50
【问题描述】:
当我使用常规套接字时,我可以调用 getInputStream() 并使用 available() 来查看有多少字节可用。我切换到 SSLSocket,但由于某种原因,现在 available() 总是返回 0。相反,当我阅读时,我仍然可以获取数据。如何判断 SSLSocket 中是否有可用数据,以便在没有数据的情况下可以在不阻塞的情况下对其进行服务?
注意事项:
- 我无法在 InputStream 上调用 read(),否则线程将阻塞。我希望在我的实现中实现非阻塞。
- 即使有 SSLSocket 的 InputStream 数据,available() 也会返回 0。
【问题讨论】:
-
这很有趣。但是,就我而言,有可用数据,因此 read() 不应阻塞,并且 available 不应返回 0。
-
查看该答案的第一条评论 - “还要注意,对于 SSL 套接字,available() 总是返回零”。这将有助于了解为什么在您的情况下阻塞是一个问题。请记住,您正在使用阻塞 IO
-
啊,我明白了。那么这是否意味着不读取就无法判断 SSLSocket 中有数据?
-
阻塞理论上不是问题,除非我需要重构我的很多代码。我之前使用的是 Sockets 而不是 SSLSockets 并使用了 available(),所以我希望过渡会更容易。