2013-12-17 4 views
0

Пожалуйста, помогите мне узнать, как читать поток данных в java. Мое требование - подключить telnet к маршрутизатору. Эта часть выполнена. От маршрутизатора, нужно подключиться к удаленной машине xxx, используя свой IP-адрес и номер порта через telnet. Выполняя эту связь, я получаю некоторый ответ. Но при чтении программный контроль останавливается на методе read() класса InputStream. Вот фрагмент кода, который я использую для чтения потока данных.Как читать данные из datastream

 buff = new byte[4*1024]; 
     ret_read = 0; 

     do 
     { 
      ret_read = in.read(buff); // Program control gets hanged here. Once all the data are read... 
      if(ret_read > 0) 
      { 
       System.out.println(new String(buff,0,ret_read)); 

      } 
     }while(ret_read > 0); 

ответ

1

То, что происходит чтение блокирует и ждет больше данных, которые будут отправлены на поток, он будет продолжать делать это до тех пор пока поток не будет закрыт или больше данных посылается.

Вам необходимо либо использовать неблокирующее чтение, либо поставить тайм-аут на чтение, либо закрыть сервер потокового сервера после завершения отправки данных.

+0

Его ждет еще несколько данных для чтения. Но в потоке данных нет. Итак, как выйти из метода read(). –

+0

Вы можете использовать доступные(), чтобы увидеть, есть ли что-нибудь перед чтением или вы можете использовать неблокирующее соединение, такое как канал сокета: http://docs.oracle.com/javase/6/docs/api/java /nio/channels/SocketChannel.html –

+0

Спасибо Тим. Но метод available() в классе InputStream всегда возвращает ноль. Поэтому я попытаюсь использовать неблокирующее соединение для read() –

Смежные вопросы