2016-11-29 6 views
1

Я использую библиотеку org.apache.commons.net.telnet, чтобы установить соединение с моим сервером Telnet, который имеет немного отличающуюся реализацию, чем стандарт RFC 854, но ничего страшного.Отправить telnet-команды с org.apache.commons.net.telnet

На самом деле, единственный способ установить соединение с этим удаленным сервером telnet - использовать org.apache.commons.net.telnet, поскольку чистый Java-Socket не работал.

Я stucked с этой библиотекой, так как я не могу понять способ отправить commans с ним, используя sendCommand метод, который принимает byte (не byte[]), поскольку это один и единственный аргумент.

преобразовать мой String command в byte[] массив, но я не могу передать, что в качестве аргумента ...

Это мой код до сих пор:

import org.apache.commons.net.io.Util; 
import org.apache.commons.net.telnet.TelnetClient; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

public class Telnet { 

    public static void main(String[] args) { 
     TelnetClient telnet; 

     telnet = new TelnetClient(); 

     try { 
      telnet.connect("17.16.15.14", 12345); 

      byte[] cmd = "root".getBytes(); 

      telnet.sendCommand(cmd); // this is where I'm stuck 
     } catch (IOException e) { 
      e.printStackTrace(); 
      System.exit(1); 
     } 

     readWrite(telnet.getInputStream(), telnet.getOutputStream(), 
       System.in, System.out); 

     try { 
      telnet.disconnect(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      System.exit(1); 
     } 

     System.exit(0); 
    } 

    public static final void readWrite(final InputStream remoteInput, 
             final OutputStream remoteOutput, 
             final InputStream localInput, 
             final OutputStream localOutput) 
    { 
     Thread reader, writer; 

     reader = new Thread() 
     { 
      @Override 
      public void run() 
      { 
       int ch; 

       try 
       { 
        while (!interrupted() && (ch = localInput.read()) != -1) 
        { 
         remoteOutput.write(ch); 
         remoteOutput.flush(); 
        } 
       } 
       catch (IOException e) 
       { 
        //e.printStackTrace(); 
       } 
      } 
     } 
     ; 


     writer = new Thread() 
     { 
      @Override 
      public void run() 
      { 
       try 
       { 
        Util.copyStream(remoteInput, localOutput); 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
        System.exit(1); 
       } 
      } 
     }; 


     writer.setPriority(Thread.currentThread().getPriority() + 1); 

     writer.start(); 
     reader.setDaemon(true); 
     reader.start(); 

     try 
     { 
      writer.join(); 
      reader.interrupt(); 
     } 
     catch (InterruptedException e) 
     { 
      // Ignored 
     } 
    } 
} 

Длинная короткая история: Как я могу отправлять команды с помощью этой библиотеки?

ответ

2

Вы можете записать данные с помощью OutputStream, возвращаемого с getOutputStream, например. telnet.getOutputStream().write(cmd);. Возможно, вам потребуется позвонить .flush() на OutputStream

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

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