问题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()); } } }