2011-05-02 3 views
1

Я пытаюсь подключиться к удаленной системе Linux с другой системы Linux через Telnet с помощью Java-код, как показано ниже:телнета от Явы

public static void main(String[] args) throws InterruptedException 
{ 
    // TODO Auto-generated method stub /usr/bin/telnet 
    try 
    { 
     String line, commandInput; 
     ProcessBuilder telnetProcessBuilder = new ProcessBuilder("/bin/bash"); 
     telnetProcessBuilder.redirectErrorStream(true); 
     Process telnetProcess = telnetProcessBuilder.start(); 
     BufferedReader input = new BufferedReader(new InputStreamReader(telnetProcess.getInputStream())); 
     BufferedWriter output = new BufferedWriter(new OutputStreamWriter(telnetProcess.getOutputStream())); 
     commandInput = "telnet <hostname> -l <username>\n"; 
     output.write(commandInput); 
     output.flush(); 
     commandInput = "<password>\n"; 
     output.write(commandInput); 
     output.flush(); 
     commandInput = "ls -l\n"; 
     output.write(commandInput); 
     output.flush(); 
     commandInput = "pwd\n"; 
     output.write(commandInput); 
     output.flush(); 
     commandInput = "exit\n"; 
     output.write(commandInput); 
     output.flush(); 
     commandInput = "uname -a\n"; 
     output.write(commandInput); 
     output.flush(); 
     commandInput = "exit\n"; 
     output.write(commandInput); 
     output.flush(); 
     while((line = input.readLine())!= null) 
      System.out.println(line); 
     //telnetProcess.destroy(); 
    } 
    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Я могу подключиться к удаленному компьютеру и выполнить команды перед первым выходом и он выходит из удаленной машины, когда приходит первый выход. Теперь проблема в том, что я не могу выполнять команды после первого выхода, даже если его команда выхода из/bin/bash, которая завершит выполнение процесса кодом 0. И если я уничтожу процесс после первого выхода, BufferedReader и BufferedWriter выиграют работа, которая обычно работает, если процесс завершается с кодом 0. Я не уверен, что может привести к неработоспособности команд после первого выхода. Пожалуйста, дайте мне знать ответ, если кто-нибудь уже столкнулся с ним.

Благодаря

Ashutosh

ответ

1

When Runtime.exec() won't Read, он имеет тонн хороших советов при вызове внешних исполняемых файлов.

Довольно вероятная проблема с вашим кодом заключается в том, что вы не читаете stdout процесса до конца вашего кода. Это может легко привести к точке, где выходной буфер процесса заполнен, и он не может делать больше вывода, пока вы не прочитаете некоторые.

Вы должны читать вывод процесса на отдельном потоке (см статью подробности и кода).

+0

Hi Joachim, спасибо, что ответили. Как вы сказали, я немного изменил код, а вместо telnet и его пароль я просто дал нормальные команды/bin/bash, 10 обычных команд, таких как pwd, uname -a, whoami, finger , cat из почти 100 килобайт текста и выполнила команду «ls /etc/init.d -l \ n» почти в 10 раз, что довольно много в моей Linux-системе, и, наконец, команда выхода и программа работали безупречно со всем выходом, напечатанным на консольном окне, и вышли с кодом 0. Но , у меня есть эта проблема после того, о чем я спросил. В любом случае, спасибо за быстрый ответ. – Ashutosh

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

  • Нет связанных вопросов^_^