主程序
public class TrunkGroupJob { /**
 * @param args
 */
public static void main(String[] args) {
long lasting=System.currentTimeMillis();
System.out.println("运行时间:"+(System.currentTimeMillis()-lasting));
TrunkGroupDAO trunkGroupDAO =new TrunkGroupDAO();
TelnetFileDAO telnetDAO=new TelnetFileDAO();
TGbiz tGbiz=new TGbiz();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String ctime = formatter.format(new Date());
TelnetFile telnetFile=new TelnetFile();
telnetFile.setPath(ctime);



        try {
         List<TrunkGroup> trunkGroups=trunkGroupDAO.findall();
         for(int i=0;i<trunkGroups.size();i++){
         TrunkGroup trunkGroup=trunkGroups.get(i);
        
         if(tGbiz.Telneten(trunkGroup)){
         String value=tGbiz.sendCommand(trunkGroup.getCommands(),trunkGroup.getUser());
 
         telnetFile.setFilename(trunkGroups.get(i).getUser());
         telnetFile.setValues(value);
         telnetDAO.save(telnetFile);
         //System.out.println(trunkGroups.get(i).getCommands());
         //System.out.println(trunkGroups.get(i).getCommands().size());
         //telnetDAO.disconnect();
         //trunkGroup=null;
         //if (flag){
         tGbiz.disconnect();
         }
         //tGbiz=null;
         System.gc();
         //new Thread().wait(20);
         }
        
        } catch (DocumentException e) {
            e.printStackTrace();        } catch (Exception e) {
            e.printStackTrace();        } System.out.println("运行时间:"+(System.currentTimeMillis()-lasting));
}调用的程序tGbiz.Telneten(trunkGroup
package com.chinacnc.telnet.dao;import java.util.List;import org.apache.commons.net.telnet.TelnetClient;
import com.chinacnc.db.TelnetManager;
import com.chinacnc.pojo.TGrecord;
import com.chinacnc.pojo.TrunkGroup;public class TGbiz {
private TelnetManager dbmanager=new TelnetManager();
private TGrecordDAO tGrecordDAO =new TGrecordDAO();
private TelnetClient telnet =null;
public boolean Telneten(TrunkGroup trunkGroup) {
//TelnetClient telnet = new TelnetClient();//注意变量的作用域,必须声明成局部变量,否则连接始终连接1出错
telnet =dbmanager.Telneten(trunkGroup.getIp(),trunkGroup.getName(),trunkGroup.getPassword());//注意变量的作用域,必须声明成局部变量,否则连接始终连接1出错
 if (telnet==null){
return false;
  }else{
  return true;
}

  }


   //这里做日志的保存,保存到数据库中?
   public String sendCommand(List<String> commands,String office)
   { 
  // System.out.println(commands);
   String values=null;
       try
       {
        values="";
    
         for(int i=0;i<commands.size();i++){
                
          System.out.println(commands.get(i));
         
          String value =dbmanager.sendCommand(commands.get(i));
         
          values=value+"\n"+values;
         
          TGrecord tGrecord=new TGrecord(commands.get(i), value,
          office);      //tGrecordDAO.save(tGrecord);
         
          System.out.println(value);
          //value="";
         }
         
       
       }
       catch (Exception e)
       {
           e.printStackTrace();
       }
       return values;
   }
   public boolean disconnect()
   {
       try
       {
        //telnet.
       // sendCommand(exit);
        dbmanager.disconnect(telnet);
        //dbmanager=null;
       // telnet
       }
       catch (Exception e)
       {
           e.printStackTrace();
           return false;
       }
       return true;
   }
}
再次调用
package com.chinacnc.db;import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.PrintStream;import org.apache.commons.net.telnet.TelnetClient;public class TelnetManager {
   private InputStream in;
   
   private PrintStream out;
   
   public static char prompt = ConfigTelnet.en;
public TelnetClient Telneten(String server,String Username,String password) {
TelnetClient telnet = new TelnetClient();
       try
       {
    
        System.out.println(telnet.isConnected());
        if (!telnet.isConnected()){
           telnet.connect(server, 23);
           in = telnet.getInputStream();
           out = new PrintStream(telnet.getOutputStream());
           // Log the user on
           readUntil(ConfigTelnet.loginTelnet);
           write(Username);
           readUntil(ConfigTelnet.PasswordTelnet);
          // System.out.println(ConfigTelnet.PasswordTelnet);
           write(password);
           //this.prompt=prompt;
    
           readUntil(prompt + "");
           System.out.println(server);
        }

       }
       catch (Exception e)
       {
           e.printStackTrace();
           return null;
       }
       return telnet;
}
public String readUntil(String pattern)
   {System.out.println(pattern);
       try
       {
          char lastChar = pattern.charAt(pattern.length() - 1);            StringBuffer sb = new StringBuffer();
           System.out.println("--------------------------------");
           
           char ch = (char)in.read();
          // if (ch==0) {总是停止在这里,单步调试都能执行过去
           System.out.println(ch);//};
           while (true)
           {
               sb.append(ch);
               if (ch == lastChar)
               {
                  if (sb.toString().endsWith(pattern))
                   {
                  String str= sb.toString();
                  sb = new StringBuffer();
                     return str;
                     
                   }
               }
               ch = (char)in.read();
           }
       }
       catch (Exception e)
       {
           e.printStackTrace();
       }
       return null;
   }
public String readUntil(String pattern,String pattern1)
   {
       try
       {
           StringBuffer sb = new StringBuffer();            char ch = (char)in.read();
           while (true)
           {
               sb.append(ch);
                   if ((sb.toString().endsWith(pattern))||(sb.toString().endsWith(pattern1)))
                   {
                       return sb.toString();
                   }
               ch = (char)in.read();
           }
       }
       catch (Exception e)
       {
           e.printStackTrace();
       }
       return null;
   }
   public void write(String value)
   {
       try
       {
           out.println(value);
           out.flush();
       }
       catch (Exception e)
       {
           e.printStackTrace();
       }
   }
   public String sendCommand(String command)
   {
       try
       {
        write(command+"\n");
         
           return readUntil(prompt + "");
       }
       catch (Exception e)
       {
           e.printStackTrace();
       }
       return null;
   }
   public boolean save(String path,String filename,String values)
   {
File fPath=new File(ConfigTelnet.fpath+path); if (!fPath.isDirectory()){
fPath.mkdirs();
}
try {
      FileOutputStream out=new FileOutputStream(ConfigTelnet.fpath+path+"/"+filename);
             PrintStream p=new PrintStream(out);
                 p.print(values);
p.close();
    out.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

return false;
}
return true;
   }
   public boolean disconnect(TelnetClient telnet)
   {
       try
       {
        write("exit");
        in.close();
        out.close();
       telnet.disconnect();
       }
       catch (Exception e)
       {
           e.printStackTrace();
           return false;
       }
       return true;
   }
}
解析文本
package com.chinacnc.db;
public class XMLmanager2 {
   public List<TrunkGroup> query() throws DocumentException {
   List<TrunkGroup> lists=new ArrayList<TrunkGroup>();
   TrunkGroup trunkGroup=null;
   int j=0;
Document document=Config2.reader.read(Config2.file);            Element rootElt = document.getRootElement(); // 获取根节点
            System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称            Iterator iter = rootElt.elementIterator("TG");
            while (iter.hasNext()) {
                j++;
                Element recordEle = (Element) iter.next();
                String ip = recordEle.elementTextTrim("ip"); // 拿到head节点下的子节点title值
                String name = recordEle.elementTextTrim("name"); 
                String password = recordEle.elementTextTrim("password"); 
                String user = recordEle.elementTextTrim("user"); 
         //tg1.disconnect("logout");
         //System.out.print(tg1.save("D:/test/", "test7.txt", note));
                System.out.println("ip:" + ip);
                System.out.println("name:" + name);
                System.out.println("password:" + password);
                Iterator iters = recordEle.elementIterator("commands"); // 获取子节点head下的子节点script
                List<String> commandString=new ArrayList<String>();
                while (iters.hasNext()) {
                
                    Element itemEle = (Element) iters.next();
                   List<Element> commands=itemEle.elements("command");       
              for(int i=0;i<commands.size();i++){
               commandString.add(commands.get(i).getText());
                    System.out.println("command:" + commands.get(i).getText());
              }
                }
             trunkGroup=new TrunkGroup(j, ip, user, name,password,commandString);
                lists.add(trunkGroup);
            }
   return lists;
   
   } 
要解析的文本
<?xml version="1.0" encoding="UTF-8"?>
<TGs>
<TG names="server">
<ip>------</ip>
<user>HEXING-10</user>
<name>uce_ins</name>
<password>uce_test</password>
<commands>
<command>top n 1</command>
<command>df -k</command>
<command>ntpq -p</command>
<command>uptime</command>
</commands>
</TG>
</TGs>
telnet

解决方案 »

  1.   

    建议楼主格式化一下代码及异常信息
    1、在eclipse先将代码进行格式化; 
    2、在发贴的文本框上方单击“#”按钮,选择 Java 
    3、将要发的代码粘贴到【code=Java】和【/code】之间,这样发出来的代码就会像下面一样:
      

  2.   

    不报,异常,单步调试就能过去!但是如果全部执行的话,就会停止在// if (ch==0) {总是停止在这里,单步调试都能执行过去
               System.out.println(ch);//
      

  3.   

    是的.老师!谢谢,发送命令或者登陆,然后 就终止在这里readUntil(ConfigTelnet.PasswordTelnet);