2016-11-29 182 views
1

我使用org.apache.commons.net.telnet库与我的Telnet服务器建立连接,该服务器与标准RFC 854稍有不同,但没有什么太可怕的。使用org.apache.commons.net.telnet发送telnet命令

实际上,我建立到这个远程telnet服务器的连接的唯一方法是利用org.apache.commons.net.telnet,因为纯Java Socket不起作用。

我stucked与此库因为我不能想出一个办法用它发送commans使用sendCommand方法,它接受一个byte(不byte[])为它的唯一理由。

将我String commandbyte[]数组,但我不能传递作为参数...

这是我到目前为止的代码:

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

您可以使用从getOutputStream返回的OutputStream(例如, telnet.getOutputStream().write(cmd);。您可能还需要在OutputStream上调用.flush()