当前位置: 代码迷 >> J2EE >> 从网下找了个Telnet到远程主机的程序,调试时能打印出结果,但是运行时就打印不出来
  详细解决方案

从网下找了个Telnet到远程主机的程序,调试时能打印出结果,但是运行时就打印不出来

热度:90   发布时间:2016-04-22 00:36:52.0
从网上找了个Telnet到远程主机的程序,调试时能打印出结果,但是运行时就打印不出来?
问题1:调试时能打印出结果,但是运行时就打印不出来?好像是线程在运行时不能触发。

问题2:返回的结果都是乱码,inputstream的buff里用什么编码呢?

问题3:receivedNegotiation是干什么用的?

Java code
import org.apache.commons.net.telnet.*;  import java.io.*;  import java.net.SocketException;  import java.util.StringTokenizer;    public class TmhTelnet2 implements Runnable, TelnetNotificationHandler {        private static TelnetClient tc = null;      private InputStream in;      private PrintStream out;      public static void main(String args[]){               Thread t = new Thread(new TmhTelnet2("192.168.0.101",23,"admin","admin"));          t.start();      }       public TmhTelnet2(String host, int port,String username,String password) {          if(intconnect(host,port)){              write(username);              write(password);              writescript("d:\\command.txt");          }      }        private void writescript(String filename) {          try {              if(new File(filename).exists()){                  FileReader f = new FileReader(filename);                  BufferedReader reader = new BufferedReader(f);                  String command = "";                  while(command !=null){                      command = reader.readLine();                      write(command);                  }              }          } catch (FileNotFoundException e) {              // TODO Auto-generated catch block              e.printStackTrace();          } catch (IOException e) {              // TODO Auto-generated catch block              e.printStackTrace();          }      }          private void write(String command) {          try{              System.out.println("command:>>>>>>>>>"+command);              out.println(command);              out.flush();                      }catch(Exception e){              e.printStackTrace();          }      }        private boolean intconnect(String host, int port) {          try {              tc = new TelnetClient();              TerminalTypeOptionHandler ttopt = new TerminalTypeOptionHandler(                      "VT100", false, false, true, false);              EchoOptionHandler echoopt = new EchoOptionHandler(true, false,                      true, false);              SuppressGAOptionHandler gaopt = new SuppressGAOptionHandler(true,                      true, true, true);                tc.addOptionHandler(ttopt);              tc.addOptionHandler(echoopt);              tc.addOptionHandler(gaopt);              tc.connect(host, port);              in = tc.getInputStream();              out = new PrintStream(tc.getOutputStream());              return true;          } catch (Exception e) {              e.printStackTrace();              try {                  tc.disconnect();              } catch (IOException e1) {                  // TODO Auto-generated catch block                  e1.printStackTrace();              }              return false;          }             }            public void receivedNegotiation(int negotiation_code, int option_code) {          String command = null;          if (negotiation_code == TelnetNotificationHandler.RECEIVED_DO) {              command = "DO";          } else if (negotiation_code == TelnetNotificationHandler.RECEIVED_DONT) {              command = "DONT";          } else if (negotiation_code == TelnetNotificationHandler.RECEIVED_WILL) {              command = "WILL";          } else if (negotiation_code == TelnetNotificationHandler.RECEIVED_WONT) {              command = "WONT";          }          System.out.println("Received " + command + " for option code "                  + option_code);      }        /***************************************************************************      * Reader thread. Reads lines from the TelnetClient and echoes them on the      * screen.      **************************************************************************/      public void run() {          InputStream instr = tc.getInputStream();            try {                byte[] buff = new byte[1024];              int ret_read = 0;              do {                  ret_read = instr.read(buff);                  if (ret_read > 0) {                      System.out.print(new String(buff, 0, ret_read));                  }                } while (ret_read >= 0);          } catch (Exception e) {              System.err.println("Exception while reading socket:"                      + e.getMessage());          }            try {              tc.disconnect();          } catch (Exception e) {              System.err.println("Exception while closing telnet:"                      + e.getMessage());          }      }  }
  相关解决方案