Java readByte()会阻止应用程序

时间:2011-01-28 14:14:33

标签: java timeout

以下循环似乎会阻止整个服务器应用程序,如果客户端突然断开连接并引发了EOF异常:

String a = "";
int amount = 1;
while(((cr = streamIn.readByte()) != EOF))
{
 if(amount < 100)
 {
  a+=(char)cr;
  amount++;
 }
 else
  break;
}

根据功能描述: readByte():接收一个字节。该方法将阻止,直到数据可用。

问题是,如何让它超时,以便最多只能阻止几秒钟?

3 个答案:

答案 0 :(得分:2)

您是否尝试过设置Socket.setSoTimeout()

答案 1 :(得分:0)

那是什么服务器?我的意思是它阻止服务于客户端的线程突然掉线......它应该仍然服务于其他客户端

答案 2 :(得分:0)

查看使用inputStream.available(),它返回可以无阻塞地检索的字节数。

(未经测试)示例:

String a = "";
int amount = 1;
int available = 0;
while(true){
    int available = streamIn.available();
    if(available <= 0){
        continue;
    }   
    byte cr = streamIn.readByte();
    if(cr == EOF){
        break;
    }
    if(amount < 100){
        a+=(char)cr;
        amount++;
    }else{
        break;
    }
}