2010-08-28 63 views
1

我试图运行一个线程,转到套接字,抓取输入流,并读取它。我创建了数百个这样的线程,并设置了读取超时,但线程仍然停留在read()行。java inputStream冻结

public void readPack() { 

socket.setSoTimeout(4*1000); 

if (socket.isConnected()) { 


    buffer parse = new buffer(); 
    parse.addByte((byte) skt.getInputStream().read()); 
    parseIncoming(parse); 
} 


} catch (Exception e) {} 

} 
+0

这里没有足够的信息来猜测问题所在。 – msw 2010-08-28 00:20:58

回答

0

呼叫skt.available(),然后调用读了很多次,或使用skt.read(byte[])。其他明智的skt.read()将阻止。您的设置超时连接到套接字,而不是读取超时。

+0

他正在设置的超时是读取超时,而不是连接超时。 – EJP 2010-08-28 01:23:44

1

奇怪的代码。您创建一个缓冲区,读取一个字节,然后解析该字节,然后重复整个过程。一个字节肯定不会太多解析。你永远不会从读取中检查-1,所以当对端断开连接时,这个循环将无休止地旋转。最后,Socket.isConnected()不是一个有用的测试,具体而言,它不检测对等连接断开。

+0

虽然假设是一个if,只是想拿起一个字节 – koolaid2345 2010-08-28 01:33:39

+0

它仍然是错误的,见上文。 – EJP 2010-08-28 03:19:31