2017-03-09 31 views
2

Stream.continually返回空,如果in.readLine时间超过1 minute流不断只读取1分钟

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 

长为什么会出现这种情况?

我可以改变这与一些财产。

我已经浏览了整个Stream文档,但我想我可能会错过一些东西。

我也尝试加入s.setSoTimeout(300000) 另外我读了SSLSocketFactory的官方文档,但找不到任何默认的TimeOut。还没有找到SSLSocket


结论(后调试这个错误)

这有什么好做流。它也不与SSLSocketFactorySSLSocket有任何关系。这是代理中的超时问题。我弄错了。

+0

's'是什么?一个更完整的例子会更容易尝试。 –

+0

@Michael,我添加了完整的代码 – orange14

+0

我不认为这是一个'Stream'问题。如果从REPL调用Stream.continually(io.StdIn.readLine)...',它将无限期地等待。 – jwvh

回答

2

这实际上与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,给定一个空序列,将产生一个空字符串。

+0

你说得对。它与Steam无关。 – orange14