【问题标题】:java inputStream Freezingjava inputStream 冻结
【发布时间】:2011-04-05 01:39:13
【问题描述】:

我正在尝试运行一个线程,该线程进入一个套接字,获取输入流并读取它。我创建了数百个这样的线程并设置了读取超时,但线程仍然停留在 read() 行。

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) {}

}

【问题讨论】:

  • 这里没有足够的信息来猜测问题所在。

标签: java multithreading sockets inputstream


【解决方案1】:

奇怪的代码。您创建一个缓冲区,将一个字节读入其中,然后解析该字节,然后重复整个过程。一个字节肯定不需要太多解析。您永远不会从读取中检查 -1,因此当对等方断开连接时,此循环将无休止地旋转。最后 Socket.isConnected() 不是一个有用的测试,特别是它不会检测到对等方断开连接。

【讨论】:

  • while 应该是一个 if,只是想拾取一个字节
【解决方案2】:

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

【讨论】:

  • 他设置的超时是读取超时,不是连接超时。
猜你喜欢
  • 2015-05-09
  • 2012-06-26
  • 2014-10-05
  • 2011-03-12
  • 2020-07-03
  • 2015-05-09
  • 1970-01-01
相关资源
最近更新 更多