Stream.continually
的时间超过in.readLine
, 1 minute
将返回空字符串
val f = SSLSocketFactory.getDefault.asInstanceOf[SSLSocketFactory]
val s = f.createSocket(ip, port).asInstanceOf[SSLSocket]
s.startHandshake()
s.setTcpNoDelay(true)
val out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream))
val in = new BufferedReader(new InputStreamReader(s.getInputStream))
val in = new BufferedReader(new InputStreamReader(s.getInputStream))
Stream.continually(in.readLine()).takeWhile(_ != null).mkString
为什么会这样?
我可以使用某些属性更改此设置。
我已经浏览了整个流文档,但我想我可能会遗漏一些东西。
我还尝试添加s.setSoTimeout(300000)
我还阅读了SSLSocketFactory
的官方文档,但找不到任何默认的TimeOut。也找不到SSLSocket
结论(调试此错误后)
这与Stream无关。它也与SSLSocketFactory
或SSLSocket
无关。这是代理中的超时问题。我弄错了。
答案 0 :(得分:3)
这实际上与Stream
无关。尝试从代码中取出Stream
:
val ip = "74.125.141.147" // google
val port = 443
val f = SSLSocketFactory.getDefault.asInstanceOf[SSLSocketFactory]
val s = f.createSocket(ip, port).asInstanceOf[SSLSocket]
s.startHandshake()
s.setTcpNoDelay(true)
val out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream))
val in = new BufferedReader(new InputStreamReader(s.getInputStream))
println {
in.readLine()
}
这最终打印null
,因为它应该(我认为当遥控器感到无聊并挂断时)。
发生的事情是mkString
,给定一个空序列,将产生一个空字符串。