Telnet获取多个服务器的数据,中间总是停止!求高手解决!
主程序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、在eclipse先将代码进行格式化;
2、在发贴的文本框上方单击“#”按钮,选择 Java
3、将要发的代码粘贴到【code=Java】和【/code】之间,这样发出来的代码就会像下面一样: --------------------编程问答-------------------- 异常是什么? --------------------编程问答-------------------- 不报,异常,单步调试就能过去!但是如果全部执行的话,就会停止在// if (ch==0) {总是停止在这里,单步调试都能执行过去
System.out.println(ch);// --------------------编程问答-------------------- 求大师!大师在吗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --------------------编程问答-------------------- 注释加好点,代码格式化一下啊, 是不是读取服务器上的文件,终止了? --------------------编程问答-------------------- 是的.老师!谢谢,发送命令或者登陆,然后 就终止在这里readUntil(ConfigTelnet.PasswordTelnet);
补充:Java , Java SE