Java readByte () блокирует приложение - PullRequest
0 голосов
/ 28 января 2011

следующий цикл блокирует все приложение сервера, если клиент внезапно отключился и возникла исключительная ситуация EOF:

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

В соответствии с описанием функции: readByte (): получить байт. метод будет блокироваться, пока данные не будут доступны.

Вопрос в том, как сделать тайм-аут, чтобы он блокировался максимум на несколько секунд?

Ответы [ 3 ]

2 голосов
/ 28 января 2011

Вы пробовали настройки Socket.setSoTimeout ()

0 голосов
/ 28 января 2011

Изучите использование 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;
    }
}
0 голосов
/ 28 января 2011

Что это за сервер? Я имею в виду, что он блокирует поток, который обслуживает клиента, который внезапно отбрасывается ... он все равно должен обслуживать других клиентов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...