2015-08-27 1 views
1

Посылает установку команды к беспроводному маршрутизатору TP-LINK через соединение телнета:Невозможно прочитать разрыв линии/возврат каретки от ответа сокета

Trying 1.2.3.4... 
Connected to 1.2.3.4. 
Escape character is '^]'. 
*HELLO*$$$ 
CMD 
factory RESET 
factory RESET 

Set Factory Defaults 
<4.00> set sys autoconn 0 
set sys autoconn 0 

AOK 
<4.00> 
... 

У меня есть PHP-код, который выполняет отправку команд и получает ответ с использованием гнезд:

socket_write($socket, "factory RESET\r"); // send command 
$response = socket_read($socket, 256); // get response 

PHP работает нормально. Переменная $response содержит:

factory RESET 

Set Factory Defaults 

Но с помощью Java у меня есть проблемы. Используя объект BufferedReader для чтения ответа, я могу получить содержимое первой строки. но я не могу получить следующие строки:

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
// ... 
bw.write("factory RESET"); 
bw.newLine(); 
bw.flush(); 
// ... 
StringBuilder sb = new StringBuilder(); 

String s; 
while ((s = br.readLine()) != null) { 
    sb.append(s); 
} 

я могу получить первое содержимое строки, а второе чтение не продолжить и не вызывают исключение ... Если я использую функцию read, только возвращается первая строка:

char[] buffer = new char[256]; 
br.read(buffer, 0, 256); 
String response = new String(buffer); // response is "factory RESET" 

В чем проблема?

ответ

0
  1. Ваш код PHP выполняет два чтения. Ваш код Java пытается прочитать до конца потока, что происходит только тогда, когда партнер завершает соединение. Сделайте одно чтение.

  2. Разделитель строк в протоколе Telnet определяется как \r\n, если вы не используете двоичный режим, которым вы не являетесь. Не как \r или что-то еще BufferedWriter может делать на вашей платформе.

+0

Цистерны! Я удалил вызов '' '' 'newLine()' '' метод и команду chave, добавляя команду '' '\ r \ n''''. Работает!! –

+0

Это только часть его. Не чтение до конца потока - главная проблема здесь. – EJP